반응형

Problem Solved/HackerRank

    [HackerRank][Javascript] Queues: A Tale of Two Stacks

    [HackerRank][Javascript] Queues: A Tale of Two Stacks

    문제 - Queues: A Tale of Two Stacks 문제 설명 여러 라인으로 입력되는 것을 타입에 따라 다르게 작동하는 큐, 스택을 구현하는 문제 나는 Lifo인 스택으로 구현하였다. 변수 q에 라인 개수를 담는다. q를 기반으로 반복문을 돌며 타입에 따라 다른 명령어를 실행한다. 1일 때: 주어진 숫자를 arr에 push한다. 2일 때: arr의 가장 앞의 숫자를 shift하여 삭제한다. 3일 때: arr의 가장 첫 요소를 콘솔로 출력한다. 성공 코드 // 한 줄씩 읽게 하기 위한 코드 let inputString = ''; let currentLine = 0; process.stdin.on('data', inputStdin => { inputString += inputStdin; }); pr..

    [HackerRank][Javascript] Balanced Brackets

    [HackerRank][Javascript] Balanced Brackets

    문제 - Balanced Brackets 문제 설명 괄호들이 짝이 맞는지 확인하는 문제 1번 풀이 주어진 괄호인 {[()]}의 여는 괄호들을 닫는 괄호로 하나씩 치환해 배열에 추가한다. 닫는 괄호가 나오고 배열의 마지막 문자와 같으면 배열에 pop하여 삭제한다. 위의 두 조건에도 들지 않으면 짝이 맞지 않는 것이므로 NO를 반환한다. 여는 괄호의 숫자가 많을 때 NO를 반환하기 위해 마지막에 남은 문자의 개수로 YES와 NO를 판단하여 반환한다. 2번 풀이 opens와 closes들을 배열로 묶고, 객체를 사용해 닫는 괄호는 key로, 여는 괄호는 value로 묶는다. 반복문을 돌며 1번 풀이와 동일하게 여는 괄호이면 배열에 추가한다. 닫는 괄호가 나오면 pop하여 짝이 맞는지를 만들었던 객체를 통해 판..

    [HackerRank][Javascript] Mark and Toys

    [HackerRank][Javascript] Mark and Toys

    문제 - Mark and Toys 문제 설명 주어진 금액으로 가장 많이 살 수 있는 장난감의 개수를 구하는 문제 가장 많은 개수를 구하기 위해서는 작은 금액으로 여러 개를 구매해야 한다. 따라서 prices 배열을 오름차순으로 정렬한다. 주어진 금액인 k가 prices를 뺐을 때 0보다 작으면 원래 값을 리턴하고, 그게 아니면 price를 빼고 개수를 1 늘려 준다. reduce를 사용해 값을 계산하고 리턴한다. 성공 코드 function maximumToys(prices, k) { prices.sort((a, b) => a - b); const calcMax = (result, v) => { if (k - v < 0) return result; k -= v; return result + 1; }; re..

    [HackerRank][Javascript] Bubble Sort

    [HackerRank][Javascript] Bubble Sort

    문제 - Bubble Sort 문제 설명 버블 소트를 한 결과를 문장으로 출력하는 문제. 버블 소트는 정렬 알고리즘 중에 가장 쉬우면서 시간복잡도가 큰 알고리즘이다. 이중 반복문 안에서 값의 크기 비교를 통해 swap하면서 개수를 센다. 반복문 결과를 template literal로 저장해 콘솔로 출력하면 된다. 성공 코드 function countSwaps(a) { let count = 0; for (let i = 0; i a[j]) { let temp = a[i]; a[i] = a[j]; a[j] = temp; count++; } } } let result = `Array i..

    [HackerRank][Javascript] Common Child

    [HackerRank][Javascript] Common Child

    문제 - Common Child 문제 설명 Dynamic Programming를 사용해 LCS(Longest Common Substring)를 구하는 문제 문제 풀이법 접근부터 어렵고 예외 처리가 힘들어서 풀이 설명 및 DP, LCS에 대해 공부하고 풀이를 진행했다. LCS를 알고 있었다면 응용 문제는 아니라서 그렇게 어려운 문제는 아닌 것 같다. 빈 배열을 선언한다. 자바스크립트에서 동적 2차원 배열을 사용하기 위해서는 배열 안에 배열을 선언해야 하기 때문에 일단 1차원 배열로 선언한다. LCS를 구하기 위해 0부터 입력 문자열의 길이까지 이중 반복문을 돈다. 초기값을 0으로 지정해 사용하기 위해 s1.length - 1까지가 아닌 s1.length까지 반복문을 돈다. 1번에서 말한 2차원 배열 선언하..

    [HackerRank][Javascript] Special String Again

    [HackerRank][Javascript] Special String Again

    문제 - Special String Again 문제 설명 문자열에서 대칭되는 문자열 개수를 찾는 문제 time limit으로 계속 풀지 못해 솔루션을 보고 이해하는 방식을 택했다. 문자열을 반복문을 돌면서 나타나는 빈도수가 consecutiveLetters에 저장된다. consecutiveLetters는 index가 0일 때이거나 연속 문자가 등장할 경우 추가시면서 저장한다. consecutiveLetters를 기준으로 s[i + j] 값을 비교하며 조건에 만족하면 count가 1씩 추가되게 한다. 여기서 aaaa와 같이 같은 문자열이 반복되면 else문에 들어오지 않아서 while문에 들어오지 않고 length를 저장해 개수를 구하게 된다. while문이 끝나게 되면 현재의 문자 값으로 consecut..