문제 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
function solution(numbers) {
const answer = [];
for (let number of numbers) {
if (number % 2 === 0) answer.push(number + 1);
else {
const etc = [...number.toString(2)];
if (etc.every((e) => e === "1")) {
etc[0] = "10";
} else {
for (let x = etc.length - 1; x >= 0; x--) {
if (etc[x] === "0") {
etc[x] = "1";
etc[x + 1] = "0";
break;
}
}
}
answer.push(parseInt(etc.join(""),2));
// console.log(answer)
}
}
return answer;
}
|
cs |
문제를 보면서 이해를 하는데 생각보다 시간이 꽤 걸렸다.
그리고 어떻게 풀지 생각하는 것에도 시간이 좀 걸렸던 것 같다. 어떠한 규칙이 있을 것 같았기 때문에 그 규칙을 알아내기 위해 십진수 숫자들을 차례대로 이진수로 쭉 바꾸어 써보았더니 어떻게 풀어야 할지 방향이 좀 잡혔던 것 같다.
써보는 것이 생각보다 많이 도움이 되는 것 같다.
알아낸 사실... 우선 십진수가
1. 짝수인 경우는
이진수 변환시 모두 0으로 끝나기 때문에 문제의 요건을 만족해주기 위해서는 이진수 끝의 0을 1로만 바꾸어 준다.
2. 홀수인 경우가 있는데 여기서도 두 가지로 나누어지게 된다.
이진수 변환시
2-1.모든 수가 1인 경우
모든 수가 1인 경우에는 맨 첫 번째 1을 10으로 바꾸어준다.
2-2.그렇지 않은 경우
그렇지 않은 경우에는 가장 마지막 쪽에 있는 숫자 0을 1로 바꾸고 그 다음에 위치한 숫자 1을 0으로 바꾸면 된다.
(다른 지점 2개 이하 유의!!)
'프로그래머스' 카테고리의 다른 글
5/26[문제풀이] 프로그래머스 Lv2 최솟값 만들기 (0) | 2021.05.26 |
---|---|
5/25[문제풀이] 프로그래머스 Lv2 피보나치 수 (0) | 2021.05.25 |
5/20[문제풀이] 프로그래머스 Lv2 수식 최대화 (0) | 2021.05.21 |
5/19[문제풀이] 프로그래머스 Lv2 다음 큰 숫자 (0) | 2021.05.20 |
5/18[문제풀이] 프로그래머스 Lv2 괄호 회전하기 (0) | 2021.05.19 |