반응형

Problem Solved/HackerRank

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

    [HackerRank][Javascript] Array - New Year Chaos

    문제 New Year Chaos 문제 설명 놀이기구를 기다리는 줄에서 뇌물이 최소 몇 번 오갔는지 구하는 문제. (단, 한 사람이 뇌물을 3번 이상 준 경우는 Too chaotic을 결과로 해야 한다.) 문제 이해가 어려워 솔루션을 찾아보고 이해하는 방식을 택했다. 입력값은 뇌물로 인해 순서가 뒤섞인 배열이고, 출력값은 숫자 또는 문자열이다. 우선 뇌물을 주고받았는지를 찾기 위해 q의 길이만큼 반복문을 돈다. 한 사람이 뇌물을 3번 이상 줬다면 자신의 원래 위치보다 3 이상 앞에 있을 것이다. 이것을 바탕으로 q[i]는 현재 위치, i + 1은 원래 위치로 두고 3 이상이면 Too chaotic을 반환하도록 한다. 카오식하지 않다면 현재 위치보다 1 또는 2 작은 위치에서 뇌물을 주고받은 사람이 있는지 ..

    [HackerRank][Javascript] Arrays: Left Rotation

    문제 Arrays: Left Rotation 문제 설명 1차원 배열이 전해진 숫자만큼 오른쪽으로 회전하도록 만드는 문제. leetcode의 rotate array 문제보다 덜 까다로운 문제이다. leetcode에서는 추가 메모리를 사용하면 안됐기 때문에 하나씩 떼어서 붙여주는 방식을 택했다. 이번 문제는 splice를 시켜 바로 concat으로 붙여 주어 간단하게 해결했다. 단, 문제의 입력값 중에 d가 a의 길이보다 크다면 나머지 값으로 계산하는 등의 예외 처리는 해 주면 더 좋을 것 같다. 일단 나는 통과과 되어서 따로 해 주지는 않았다. 성공 코드 const rotLeft = (a, d) => a.concat(a.splice(0, d));

    [HackerRank][Javascript] 2D Array - DS

    문제 2D Array - DS 문제 설명 2차원 6 * 6 배열에서 나올 수 있는 모래시계 중에서 가장 큰 합을 구하는 문제 6 * 6 배열에서 모래시계는 4 * 4 = 16개가 나온다. 모든 모래시계의 합을 구하기 위해 이중 반복문을 이중 배열보다 2보다 작은 길이만큼 돌 수 있게 한다. 이중 반복문 안에서 모래시계의 합을 구해 result보다 크면 result에 저장시키고 반복문이 끝나면 반환한다. 성공 코드 function hourglassSum(arr) { let result = -100; for (let i = 0; i < arr.length - 2; i++) { for (let j = 0; j < arr.length - 2; j++) { let sum = arr[i + 1][j + 1]; fo..

    [HackerRank][Javascript] Repeated String

    문제 Repeated String 문제 설명 a라는 문자가 반복되는 횟수를 구하는 문제 처음에 문제를 제대로 읽지 못해 a가 아닌 가장 많은 횟수를 구하는 문제로 착각하고 풀어 헤맸다. 정규식을 활용해 기본 문자열에서의 a의 개수를 구한다. 몫과 나머지를 구하고, 몫을 위에서 구한 a의 개수와 더해준다. 나머지만큼 반복문을 돌면서 나머지에서 a이면 result를 1씩 더해 준다. 최종적인 result 값을 반환하면 정답이 나온다. 성공 코드 function repeatedString(s, n) { const aCount = (s.match(/a/g) || []).length; const quotient = Math.floor(n / s.length); const remainder = n % s.lengt..