-
[JS/Sorting] 버블 정렬, 삽입 정렬, 선택 정렬 자바스크립트로 구현하기 (Bubble Sort, Insertion Sort, Selection Sort in JavaScript)Frontend 2019. 7. 20. 23:47
Sorting Algorithm 무작위로 섞여있는 데이터를 어떤 기준에 맞춰 정렬하는 알고리즘은 여러 가지가 있다. 정렬 알고리즘은 다양한 경우에 매우 유용하게 사용된다. 각종 데이터 목록을 정리하고 싶을 때 분포도의 중위값을 알아내고 싶을 때 데이터에서 중복값을 잡아내고 싶을 때 이진 탐색을 하고 싶을 때 사실 내가 공부하는 자바스크립트에 sort()라는 메소드가 이미 존재하듯이, 모든 프로그래밍 언어에는 자체적인 정렬 메소드가 있다. 그럼에도 불구하고 우리가 정렬 알고리즘을 배워야하는 이유는 시스템 정렬이 항상 좋은 퍼포먼스를 보장하지 않기 때문이다. 또한 내가 가진 데이터베이스의 양이나 상황에 따라 어떤 정렬을 사용하는 것이 좋을지 달라지기 때문에 우리는 기본적으로 유명한 정렬 알고리즘들은 반드시 ..
-
[알고리즘/자바스크립트] 뒤집어진 연결 리스트 (Reverse Linked List)Algorithm 2019. 7. 18. 11:08
Reverse Linked List Write a function that reverses the order of a singly-linked list in place. So a list like this: A -> B -> C -> null Should be transformed into a list like this: C -> B -> A -> null Example) var root = Node('A'); var nodeB = root.next = Node('B'); var nodeC = nodeB.next = Node('C'); // The list looks like this: A -> B -> C -> null var newRoot = reverseLinkedList(root); // The ..
-
[알고리즘/자바스크립트] 아나그램 판별하기 (is Anagram)Algorithm 2019. 7. 16. 12:07
문제: Modify the String prototype to add a new method `isAnagram`. `isAnagram` takes a single string argument. It returns true if that string is an anagram of the string it was called on, and false otherwise. Example: isAnagram("roasting", "organist"); // true isAnagram("presence", "presents"); // false Anagrams should ignore spaces, punctuation, and capitalization: isAnagram("Quid est veritas?", ..
-
[알고리즘/자바스크립트] 베스트앨범 / 프로그래머스 - 해시 Level 3Algorithm 2019. 7. 14. 21:44
해시 - Level 3 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인..
-
[자료 구조] Data Structure - (3) Tree / Binary Search TreeComputer Science 2019. 7. 14. 13:45
Tree 트리(Tree)는 이름 그대로 나무를 거꾸로 뒤집어 놓은듯한 형태이다. 자료구조가 하나의 뿌리에서 뻗어나가는 형상을 하고 있다. 트리 구조는 우리 일상에서 흔히 볼 수 있는 계층적인 구조(Hierarchical Structure)를 컴퓨터에서 표현한 구조이다. 한 가족의 족보나 회사의 조직도 등이 바로 트리 구조이다. 족보같은 경우 조상으로부터 자식, 자식의 자식, 자식의 자식의 자식 형태로 이루어져있기 때문이다. 컴퓨터의 파일 시스템이나 웹 페이지의 DOM 구조도 트리 구조이다. 트리 구조는 대개 위 그림과 같은 구조이다. 트리의 각 요소들은 Node라고 부르고 가장 상위의 노드를 Root Node라고 부른다. 반대로 최하위 노드는 Leaf Node 혹은 Terminal Node라고 한다. L..
-
[알고리즘/자바스크립트] 위장 / 프로그래머스 - 해시 Level 2Algorithm 2019. 7. 13. 22:56
해시 - Level 2 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다..
-
[알고리즘/자바스크립트] 완주하지 못한 선수 / 프로그래머스 - 해시 Level 1Algorithm 2019. 7. 13. 12:13
해시 - Level 1 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion return [leo,..
-
[알고리즘/자바스크립트] Binary Search Algorithm (이진 탐색 알고리즘)Algorithm 2019. 7. 12. 19:12
Binary Search(이진탐색) 만약 어떤 친구가 1부터 10까지 중에 숫자 하나를 생각한 다음 우리에게 그 숫자가 뭔지 맞춰보라고 했다고 생각해보자. 이 때 그 숫자를 맞추기 위해 1부터 10까지 하나 하나 이 숫자가 맞는지 물어본다면 우리는 최악의 경우에 10번을 질문해야할 것이다. 그런데 만약에 우리가 1과 10의 가운데 숫자를 부르고 맞춰야 할 숫자가 그 숫자보다 작은지 큰지 친구가 알려준다면 어떻게 될까? 만약에 우리가 맞춰야할 숫자 x가 3이라고 해보자. 1과 10의 중간 숫자인 5와 비교한다. x < 5 1 2 3 4 5 6 7 8 9 10 우리가 찾는 숫자는 5보다 작으니까 5보다 큰 숫자는 모두 지울 수 있다. 이제 검색할 범위가 절반 이하로 줄어들었다. 이제 1과 5의 중간인 2와 ..
-
[JS/Linked List] 자바스크립트로 Single Linked List 구현하기Frontend 2019. 7. 12. 14:24
https://im-developer.tistory.com/121?category=828401 [자료 구조] Data Structure - (1) Stack / Queue / Linked List 자료 구조는 코딩과는 별로 상관없는 것처럼 보일 수도 있겠지만 사실 프로그래밍에 있어서 매우 중요한 부분을 차지한다. 내가 어떠한 프로그램을 구현할 때, 혹은 어떤 알고리즘 문제를 해결하거나 새로운 로직.. im-developer.tistory.com 지난번 포스팅에서 정리한 Linked List는 대충 아래와 같이 생겼다. Linked list는 배열과 비교했을때 특정 데이터를 검색하는데 시간이 오래 소요된다. 그 이유는 배열은 각 공간의 주소가 인덱스라는 것으로 정해져있기 때문이다. 따라서 어떤 값의 주소만..
-
[자료 구조] Data Structure - (2) Hash TableComputer Science 2019. 7. 11. 19:13
오늘은 자료 구조 중에서 매우 중요한 것들 중 하나인 Hash Table(해시테이블) 자료 구조에 대해서 정리해보려고 한다. 만약에 다음과 같은 친구들의 이름과 전화번호 리스트가 있다고 해보자. 1 Alice 010-1234-**** 2 Sam 010-1357-**** 3 Mike 010-1248-**** ... ... 10 Harry 010-9876-**** 이제 친구들의 이름, 전화번호 데이터를 어디엔가 저장해뒀다가 전화번호가 필요할 때마다 친구들의 이름을 입력해서 전화번호 데이터를 찾으려고 한다. 이 때 친구들의 전화번호를 가장 빠르게 찾기 위한 방법 중 하나가 바로 해시 테이블이다. 해시 테이블을 구성하는 데는 해시 함수(Hash function)라는 것이 필수적이다. 해시 함수는 친구 이름과 같..