Muscardinus
N으로 표현 본문
728x90
programmers.co.kr/learn/courses/30/lessons/42895?language=javascript
문제풀이
- N의 최소 사용횟수가 8번보다 크면 -1을 반환하도록 제한되어있으므로 N을 1번 사용하는 것에서부터 8번사용하는 것까지를 순차적으로 숫자를 만들어보고, 1번부터 8번 집합에 각각 저장합니다. 그리고 number가 만들어졌는지 확인하면 됩니다.
- N이 5일때 5는 N을 1번 사용한 것이고, 55는 2번, 555는 3번, 5555는 4번, 55555555는 8번 사용한 것 입니다. 이를 각각의 집합에 미리 추가해줍니다.
- 1번 집합에 들어갈 수 있는 숫자는 5 하나 밖에 없습니다. 2번 집합에는 55외에 들어갈 수 있는 숫자가 있습니다. N + N, N-N, N*N, N/N. 즉, 1번 집합의 구성요소로 사측연산을 한 것입니다.
- 3번 집합의 구성은 555와 ( 1번집합의 구성요소 +-*/ 2번집합의 구성요소), ( 2번집합의 구성요소 +-*/ 1번집합의 구성요소) 입니다.
- 4번 집합의 구성은 5555와 ( 1번집합의 구성요소 +-*/ 3번집합의 구성요소), ( 2번집합의 구성요소 +-*/ 2번집합의 구성요소), ( 3번집합의 구성요소 +-*/ 1번집합의 구성요소) 입니다.
- 만들어진 숫자 중 타겟인 number이 발견되면 바로 집합 번호를 반환하면 됩니다.
- 순회가 모두 끝난 후에도 number를 발견하지 못했다면, 최소횟수가 8이상인 것이므로 -1를 반환합니다.
function solution(N, number) {
const set = new Array(9).fill().map(() => new Set());
for (let i = 1; i <= 8; i++) {
set[i].add(Number(N.toString().repeat(i)));
for (let j = 1; j < i; j++) {
for (const arg1 of set[j]) {
for (const arg2 of set[i - j]) {
set[i].add(arg1 + arg2);
set[i].add(arg1 - arg2);
set[i].add(arg1 * arg2);
set[i].add(arg1 / arg2);
}
}
}
if (set[i].has(number)) return i;
}
return -1;
}
728x90
'알고리즘 문제 > [프로그래머스] Lv3' 카테고리의 다른 글
섬 연결하기 (0) | 2021.02.13 |
---|---|
풍선 터트리기 (0) | 2021.02.12 |
[프로그래머스] 여행경로 (Lv3) (0) | 2020.09.09 |
[프로그래머스] 단어변환 (Lv3) (0) | 2020.09.08 |
[프로그래머스] 2 x n 타일링 (Lv 3) (0) | 2020.08.26 |
Comments