반응형

분류 전체보기

    [HackerRank][Javascript] Sherlock and the Valid String

    [HackerRank][Javascript] Sherlock and the Valid String

    문제 - Sherlock and the Valid String 문제 설명 1개를 지웠을 때 anagram을 만들 수 있는 조건을 충족하는지 판별하는 문제 Map을 2개를 만들어 개수로 판별하도록 했다. cMap: 문자열이 몇 개씩 있는지를 저장하는 Map이다. fMap: cMap에서 value들이 개수가 얼마나 되는지를 저장하는 Map이다. 이 Map을 활용해 문자열 삭제 여부를 판단한다. dCnt: 삭제된 개수를 세는 변수이다. 반복문에서 판별할 때 쓰이며, 처음 한 번만 조건을 충족하게 하기 위해 쓰인다. 반복문을 통해 입력값인 s로 cMap에 개수를 저장한다. 반복문을 통해 cMap에서 value들의 개수를 fMap에 저장한다. 만약 처음에 입력값이 모두 같은 문자가 들어온다면 YES를 반환해 아래..

    [HackerRank][Javascript] Alternating Characters

    [HackerRank][Javascript] Alternating Characters

    문제 - Alternating Characters 문제 설명 한 문자가 연속으로 등장하게 하지 않기 위해 삭제해야 하는 문자의 개수를 구하는 문제 반복문을 돌면서 현재 문자와 다음 문자가 같으면 결과값에 1을 더해 주고 결과값을 반환하면 된다. 참고: 자바스크립트에서는 문자열도 일종의 배열이기 때문에 length나 값 참조는 배열과 똑같이 할 수 있다. charAt같은 메소드를 추가로 사용하지 않아도 되서 편하다. 성공 코드 function alternatingCharacters(s) { let result = 0; for (let i = 0; i < s.length - 1; i++) { if (s[i] === s[i + 1]) result++; } return result; }

    [HackerRank][Javascript] Strings: Making Anagrams

    [HackerRank][Javascript] Strings: Making Anagrams

    문제 - Strings: Making Anagrams 문제 설명 문자열 a와 b에서 최소 몇 개의 글자를 삭제해야 애나그램이 완성되는지 구하는 문제 처음에 문자열 a, b의 길이가 같다고 생각했는데, 같지 않아서 다르게 풀었었다. 문자열 a, b를 split하여 배열로 만들어 각각 저장한다. 이중 반복문을 a, b의 길이만큼 역순으로 돈다. 여기서 역순으로 반복문을 돌린 이유는 배열의 요소를 삭제하면서 반복시킬 것이기 때문이다. 이중 반복문을 도는 이유는 a와 b의 길이가 다르고, 같다고 하여도 같은 인덱스에 같은 문자열이 있을지 알 수 없기 때문이다. 배열 a, b에서 같은 요소가 있으면 각각 배열에서 splice를 통해 삭제한다. 여기서 다른 것이 아닌 같은 것을 삭제하는 이유는 앞에서는 다른 것이라..

    [HackerRank][Javascript] Frequency Queries

    [HackerRank][Javascript] Frequency Queries

    문제 - Frequency Queries 문제 설명 타입과 값이 넘어오는 이중 배열에서 type 3일 때의 빈도수 TF 값을 구하는 문제 처음에 문제를 이해하지 못하고 설명을 듣고 이해했다. 문제를 더 꼼꼼하게 읽어야겠다. 풀이 설명을 듣고 기억에 남아서 그대로 풀었다. value의 개수를 저장하기 위한 map과 최종적으로 반환하기 위한 빈 배열을 생성한다. queries로 반복문을 돌며 타입을 체크하고 switch문을 돈다. 타입이 1이면 map에 값을 저장한다. 타입이 2이면 map에서 1을 빼 주어 삭제한다. 타입이 3이면 value들 중에 일치하는 것이 있는지 확인해 값을 배열에 담는다. 반복문이 끝나고 나온 result를 반환한다. 성공 코드 function freqQuery(queries) {..

    [HackerRank][Javscript] Map - Count Triplets

    [HackerRank][Javscript] Map - Count Triplets

    문제 - Count Triplets 문제 설명 배열 안에서 연속해서 등장하는 r의 n제곱 3개의 숫자가 몇 쌍이 되는지 구하는 문제 문제 접근하기가 어려워서 파이썬으로 간단하게 푸신 분의 풀이를 참고했다. 풀이 설명은 아래 블로그를 참고하면 되고, 나는 그 풀이를 어떻게 이해했는지 작성해 보겠다. 아래는 arr: 1 2 2 4, r: 2일 때 풀이의 Map 변화 상황이다. m2: Map { 2 => 1 } m3: Map {} // 0 m2: Map { 2 => 1, 4 => 1 } m3: Map { 4 => 1 } // 1 m2: Map { 2 => 1, 4 => 2 } m3: Map { 4 => 2 } // 3 m2: Map { 2 => 1, 4 => 2, 8 => 1 } m3: Map { 4 => 2..

    [HackerRank][Javascript] Sherlock and Anagrams

    [HackerRank][Javascript] Sherlock and Anagrams

    문제 - Sherlock and Anagrams 문제 설명 입력된 문자열에서 발생하는 모든 Anagram의 수를 반환하는 문제 이 문제는 Map을 쓰지 않고 풀었다가 한참을 고생한 문제이다. Map의 성능을 체감하게 된 문제이다. 일반 배열로 풀게 되면 time limit이 더 많이 걸리게 되는 것 같다. 우선 반복문을 돌리기 위해 입력된 문자열을 배열로 만든다. 자른 문자열의 개수를 저장하기 위해 Map을 새로 선언한다. makeSubList는 len이라는 인자를 받아 해당 숫자만큼 자르고 정렬해 개수를 앞서 만든 Map에 저장한다. 이 때, makeSubList가 reduce 안에서 불려서 바로 계산되기 때문에 함수 시작 부분에서 .clear()를 통해 Map을 비워준다. isAnagram에서는 ma..