[프로그래머스] 카펫 (완전탐색/javascript)
가운데는 노란색, 가장자리 한줄은 갈색인 카펫이 있다. 노란색 타일과 갈색 타일의 수가 주어졌을 때 카펫의 가로세로 길이를 리턴하는 문제다. 우선, 갈색 타일은 무조건 한 줄만 테두리쳐져 있으므로 결과는 [노랑타일의 너비+2, 노랑타일의 높이+2]가 될 것이다. 1. 주어진 yellow로 가능한 경우의 수를 구한다. 2. yellow로 가능한 형태 중, 주어진 brown과 일치하는 것을 찾는다. 3. 적합한 yellow 형태의 가로세로에 2씩 더한 값을 리턴한다. yellow = 12인 경우의 가능한 경우의 수를 보자. yellow 영역은 세로x가로가 [[1, 12], [2, 6], [3, 4]] 세 가지가 가능하다. ([4, 3], [6, 2], [12, 1]은 세로가 더 길게 되므로 조건에 맞지 않다..
2021. 8. 26.
[Javascript Cheet Sheet] Array객체, 반복문
for...in, for...of /** * for문은 도중에 아이템을 제거해버리면 제대로 돌지 않는다. */ const arr = [1, 2, 3, 4, 5]; for(let item of arr){ arr.shift(); console.log(arr); console.log(item); // 1 3 5 } /** * for of도 내부적으로는 for(let i = 0 ; i < arr.length ; i++) 이런식으로 동작하기 때문에, * 당연하게도 도중에 배열 아이템이 사라져버리면 배열 길이만큼 반복하지 않는다. * 이렇게 놓고 보면 당연한데도, 왜 내가 생각한 횟수만큼 돌지 않는지 고민했다. 멍청하게 헤매지 말자. * * 원본 배열을 복제한 배열로 작업을 하던가, * splice, pop, sh..
2021. 8. 25.
[Javascript Cheet Sheet] 숫자 다루기
알고리즘 문제풀이에 많이 사용되는 것만 따로 정리함. 선언 축약 let a, b; // a = undefined, b = undefined let a, b = 1; // a = undefined, b = 1 let a = 1, b = 2; // a = 1, b = 2 let [a, b] = [1, 2]; // a = 1, b = 2 let [a, b] = [1]; // a = 1, b = undefined 세 수 중 최솟값을 구하는 방법 // 1. if문 사용 let min; if(a
2021. 8. 25.
[프로그래머스] 기능개발 (javascript)
풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/42586 완성까지 남은 기간을 담은 배열을 만들고(remains) remains의 반복을 돌면서 앞의 수보다 큰 수가 나오면 세트로 배포되고, 앞의 수보다 작은 수가 나오면 새로운 배포가 된다. [5, 10, 1, 1, 20, 1]=> 5, 10 / 1, 1, 20 / 1 => [2, 2, 1] 이렇게 되어야 하므로 remains[0] = 5 첫 기능은 무조건 먼저 배포되므로 초기값으로 1 추가 answer = [1]; remains[1] = 10 remains[0] < remains[1]이므로 함께 배포됨. answer[마지막요소]++; answer = [2]; remains[2] = 1 re..
2021. 8. 20.