본문 바로가기

분류 전체보기

(432)
[230421] 위장 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 첫 번째 풀이 (실패) 각 행은 [의상의 이름, 의상의 종류] 로 이뤄져 있으므로 ‘의상의 종류’에 따른 개수를 객체로 묶는다. 서로 다른 옷의 조합의 수를 구해야하는데, 객체가 {A: a, B: b} 라면 총 조합의 수는 a + b + a*b 다. 그래서 total이라는 변수를 두고 구했음. function solution(clothes) { const table = {}; for(let i = 0; i < clothes.length; i++) { table[clothes[i][1]] = (tab..
[230420] 캐시 문제 https://school.programmers.co.kr/learn/courses/30/lessons/17680 풀이 첫 번째 풀이 (실패) 캐시 교체 알고리즘은 LRU (Least Recently Used) 라 했으니, 가장 먼저 캐시에 들어간 도시이름이 가장 먼저 교체되는 형태라 생각해서 Queue를 활용해서 풀면 되겠다 생각했다. function solution(cacheSize, cities) { cities = cities.map(city => city.toLowerCase()); let answer = cacheSize * 5; while(cities.length > cacheSize) { if(cities.slice(0, cacheSize).includes(cities[cacheSiz..
[230419] 괄호 회전하기 문제 https://school.programmers.co.kr/learn/courses/30/lessons/76502 풀이 첫 풀이 (실패) 아.. 생각이 안 떠올라서.. 코드 더럽게 노가다로 짜긴 했는데.. function solution(s) { if(s.length % 2 === 1) return 0; let answer = 0; for(let i = 0; i < s.length; i++) { let A = 0; let B = 0; let C = 0; for(let j = 0; j < s.length; j++) { const idx = (i + j) % s.length; if(s[idx] === '(') A++; if(s[idx] === '[') B++; if(s[idx] === '{') C++;..
[230419] 멀리 뛰기 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12914 풀이 직접 계산해보니, 1 → 1 2 → 2 3 → 111 12 21 → 3 4 → 5 (문제에 의해) 5 → 122 212 221 2111 1211 1121 1112 11111 → 8 6 → 222 + 2211(6) + 21111(5) + 111111 → 13 직접 몇 번 해보니까 이게 피보나치 수열이랑 동일한 문제다. 그래서 동일하게 풀이했다. function solution(n) { const arr = [1, 1, 2]; if(n < 3) return arr[n]; for(let i = 3; i
[230417] 귤 고르기 문제 풀이 내 풀이 function solution(k, tangerine) { const arr = new Array(Math.max(...tangerine)).fill(0); for(let i = 0; i a - b); let answer = 0; while(k > 0) { k -= arr.pop(); answer++; } return answer; } 크기를 인덱스로 두어, 각 크기의 개수를 배열 arr에 담음 arr을 오름차순으로 정렬 arr을 pop한 값을 k만큼 빼고, answer를 더함 3번을 k가 양수일 때까지 계속 반복함 (많은 크기의 수부터 상자에 담아버림) ..
[230416] 가장 가까운 같은 글자 문제 풀이 내 풀이 function solution(s) { return [...s].map((text, idx) => { const char = s.slice(0, idx + 1); if(char.indexOf(text) === char.lastIndexOf(text)) return -1; return idx - s.slice(0, idx).lastIndexOf(text); }) } 반복문을 돌리고, 문자열에서 index만큼 문자열의 앞부분을 자른다. 자른 문자열에서 해당 문자열이 한 번 있으면 -1를 반환. indexOf와 lastIndexOf가 동일하면, 한 번만 있다는 의미 그게 아니라면, index에서 index를 포함하지 않는, 앞까지 자른 문자열에서 마지막에 위치한(lastIndexOf) 인..
[230416] 푸드 파이트 대회 문제 풀이 내 풀이 function solution(food) { let answer = ''; for(let i = 1; i < food.length; i++) { answer += (i+'').repeat(parseInt(food[i] / 2)) } const reverse = Array.from(answer).reverse().join(''); return answer + '0' + reverse } 각 음식을 2로 나눈 정수 값만큼 repeat해서 answer에 문자열을 추가하였다. 그 문자열을 거꾸로 뒤집은 값을 reverse에 담고, answer + '0' + reverse 값을 결과값으로 반환한다. 다른 풀이도 살펴보니 동일한 방식으로 풀이하였다.
[230416] 점프와 순간 이동 문제 풀이 이번 문제는 못풀겠어서 질문하기를 통해 힌트를 보고 말았다 (ㅠㅠ) n이 1이 될 때까지, n을 2를 나누고 2로 나누어지지 않으면 -1하고, answer++한다. function solution(n) { let answer = 0; while(n > 0) { if(n % 2 === 1) { answer++; n--; } else { n /= 2; } } return answer; } 다른 풀이 2진수로 변환하고, 그것을 배열로 변환 1인 부분이 2로 나눴을 때 나머지가 있는 부분. 따라서 배열에 있는 수들을 모두 더한(reduce) 수가 정답이다. function solution(n) { if(n === 1) return 1; const nArr = Array.from(n.toString(2..

반응형