전체 글

전체 글

    프로그래머스 Lv.1 | (스택/큐) 같은 숫자는 싫어 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/12906?language=javascript 풀이 방법 1) 슬라이딩 윈도우 슬라이딩 윈도우 방식으로 풀었다. 본인과 본인 앞자리를 비교하는 방식이다. function solution(arr) { let answer = [arr[0]]; for(let i = 1; i < arr.length; i++) { if(arr[i - 1] !== arr[i]) answer.push(arr[i]); } return answer; } 방법 2) stack 아니면 answer의 맨 마지막 값과 중복되지 않는 새로운 수를 만나면 배열에 push하는 방식으로 풀 수도 있다. function solution(arr)..

    프로그래머스 Lv.2 | (DFS) 타겟 넘버 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/43165 풀이 모든 가능한 조합을 시도해봐야 한다. numbers 배열의 숫자를 순서대로 + 혹은 -를 해봐야 한다. 마치 각 숫자 노드에 다음 숫자가 +, - 두 가지 버전으로 달려있는 이진트리를 모두 순회하는 경우와 같다. 깊이 우선 탐색(DFS) 이므로 dfs라고 함수를 만들고, 다음 인덱스로 넘어가기 위한 index, 합을 축적할 currSum을 마련한다. 인덱스와 sum은 0부터 시작하므로 처음에는 dfs(0, 0)로 시작한다. dfs의 종료 조건은 index가 numbers.length가 될 때 (배열의 인덱스 범위보다 넘쳤을 때)이다. 이때는 여태가지 축적한 sum이 target과 ..

    프로그래머스 Lv.1 | (완전탐색) 모의고사 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=javascript 풀이 수포자가 찍는 패턴 - 12345 / 21232425 / 3311224455 answers와 수포자의 답을 비교하기 위해 각 수포자의 답을 문자열로 준비한다. 크게는 pattern이 answers에 몇 번 들어가는지 몫만큼 반복되고, pattern이 짤려서 붙는 경우를 위해 나머지 개수만큼을 덧붙여준다. (repeat과 substr 사용) 답이 일치하는 횟수를 세기 위해 [0, 0, 0]으로 초기화한 count 변수를 준비한다. 수포자의 답을 순회하며 answers와 답을 비교하며 만약 같다면 count[index]에 +1을 해준다. count ..

    프로그래머스 Lv.2 | (완전탐색) 소수찾기 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=javascript 풀이 DFS 방식으로 재귀함수를 이용해 풀음. 다만 반복문에서 같은 수를 선택하지 않기 위해 visited를 두고 관리해 백트래킹함 조합을 구하다보면 중복되는 조합이 생길텐데 어떻게 해결하냐 -> 조합한 결과를 Set()에 add한다. '11'과 '011' 처럼 앞에 0이 붙을텐데 어떻게 처리할거냐 -> Number('011')을 하면 숫자 11로 변한다. 소수 판별은 아예 isPrime()이라는 함수를 만들어 true/false를 반환하게 한다. 모든 가능한 조합을 만들어봐야 한다. 본인을 제외한 문자열을 점층적으로 더하도록 재귀함수를 짠다. 맨 처..

    프로그래머스 Lv.1 | 전화번호 목록 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/42577 풀이 통과한 풀이 sort()로 정렬을 하면 앞글자가 비슷한 것끼리 이웃에 위치하게 된다. ["119", "11923", "119763"] 처럼 아무리 접두어가 같은 게 여러 개 있어도 바로 인접한 요소가 자신을 접두어로 가진다면 return false를 하고 끝내면 되므로 i, i+1 만 비교하면 된다. for문을 돌려 i+1 범위가 넘치지 않게 phone_book.length -1 까지 검사하면서 [i + 1]이 [i]를 접두어로 가지는지 startsWith로 검사한다. 완전히 일치한다면 접두어가 아니게 되므로 일치하지 않는 것만 통과시킨다. 그리고 return false for문 ..

    프로그래머스 Lv.1 | 완주하지 못한 선수 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/42576 풀이 통과한 풀이 두 배열을 정렬한다. completion을 돌며 completion[i]가 participant[i]와 어긋나기 시작한 최초의 지점이 바로 완주하지 못한 참가자가 위치한 곳이므로 그 참가자를 반환한다. completion을 다 돌아도 어긋난 지점을 찾지 못한다면 participant의 마지막에 위치한 참가자가 완주 못한 것이므로 그 사람을 반환한다. function solution(participant, completion) { participant.sort(); completion.sort(); for(let i = 0; i < completion.length; i+..

    프로그래머스 Lv.1 | 폰켓몬 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/1845 이 문제의 유형은 '해시'이다. 해시란 key: value의 쌍으로 값을 관리하는 것이다. js에서는 해시를 구현할 때 Map obbject를 이용한다. 그런데 이 문제는 최빈값을 구하는 것처럼 각 요소가 몇 번 나오는지 세는 게 중요한게 아니고, 얼마나 다양한 종류의 폰켓몬을 고를 수 있는지가 중요하다. 즉, key만 중요하기 때문에 중복을 제거한 배열을 만들면 굳이 Map을 만들어 value까지 셀 필요가 없다는 말이다. 풀이 중복을 제거해 폰켓몬의 종류만 남긴다. 중복제거.length보다 골라야 하는 폰켓몬 수(N/2)가 작거나 같다면 N/2를 모두 다른 종류로 채울 수 있으므로 N..

    프로그래머스 Lv.0 | 영어가 싫어요 js

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/120894 풀이 function solution(numbers) { const numberList = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; Object.entries(numberList).forEach(([key, value]) => { numbers = numbers.split(key).join(value); }); return Number(numbers); } 객체에 문자열과 숫자를 쌍으로 넣어놓는다. Object.entries로 순회하며 key, value를 이..