반응형

Problem Solved

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

    [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를 통해 삭제한다. 여기서 다른 것이 아닌 같은 것을 삭제하는 이유는 앞에서는 다른 것이라..