반응형

Problem Solved

    [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..

    [HackerRank][Javascript] Two Strings

    문제 - Two Strings 설명 두 개의 문자 사이에 같은 문자열이 존재하는지 판별하는 문제 첫번째 풀이 Map을 2개를 사용한다. 1개는 s1을 저장하기 위해 쓰이고, 1개는 true, false 값을 저장하기 위해 쓰인다. s1 리스트가 반복문을 돌면서 맵에 개수가 저장된다. s2 리스트로 s1 문자열 중에 같은 문자열이 존재하는지 판단해 Map에 저장하며 반복한다. 마지막 반환할 때 mapOfResult에 true가 있는지를 some 메소드를 통해 판별한다. 하지만, Map을 두 개나 만들고 불필요하게 반복문을 돌게 되는 것 같아 스터디에서 알게 된 내용으로 다시 풀어 보았다. 두번째 풀이 Set에 s1을 저장한다. 여기서 처음 알게 된 사실은 Set에는 String이 들어가도 하나씩 배열로 바..

    [HackerRank][Javascript] Hash Tables: Ransom Note

    문제 Hash Tables: Ransom Note 문제 설명 magazine에 note의 모든 단어가 포함되어 있는지 확인하는 문제 Map과 every를 사용해 풀 수 있었다. Map에는 magazine을 반복문을 돌면서 단어의 개수를 저장한다. 그리고 note를 every 반복문을 돌면서 Map의 value가 undefined 또는 0이 아닐 경우에 false를 반환하게 만든다. 이 문제에서는 1개만 false여도 false이기 때문에 every를 사용하면 추가적인 변수를 사용하지 않고 풀 수 있다. 성공 코드 function checkMagazine(magazine, note) { let mapOfMagazine = new Map(); magazine.forEach((value) => { if (!m..

    [HackerRank][Javascript] Array - Minimum Swaps 2

    문제 Minimum Swaps 2 실패한 풀이 설명 원래의 배열에서 가장 작은 횟수로 바꾼 수를 찾는 문제. 아주 골치아픈 문제다. 재귀로는 절대 풀 수 없다. 그렇다고 재귀가 아닌 반복문을 쓴다고 풀리는 것도 아니다. 위의 실패한 풀이 두 개 모두 시간초과로 실패했다. swap을 하지 않고 풀어야 풀리는 문제인 것 같다. 심지어 이전에 솔루션이라고 올라온 풀이들도 현재는 통과하지 않았다. 문제가 더 엄격해 진 것 같다. 실패 2번 풀이는 왜 실패인지 아직도 잘 모르겠다. 반복문을 한 번만 도는데도 swap해 주는 곳에서 시간을 더 많이 쓰게 되는 것일까? 밑에 성공한 다른 풀이를 분석하여 이해해 보도록 하겠다. 실패한 풀이 1 function swaploop(arr, result) { if (arr =..