No Limitation
[구현, 시뮬레이션] 2개 이하로 다른 비트 - 프로그래머스 본문
https://programmers.co.kr/learn/courses/30/lessons/77885?language=python3
진수 개념에 대한 참고
https://brownbears.tistory.com/467
개인적으로 굉장히 어려운 문제라고 생각이 들고 연습이 많이 필요한 유형이다
여러 가지 다양한 규칙을 찾아보는 문제로 추측이 되는데, 최근 이러한 '비트'문제를 많이 요구하는 문제들이 많은 것 같다.
해당 문제의 경우 홀수 짝수를 나누어서 생각을 했던 것이 포인트였다. 다음과 같은 규칙이 있다.
1. 짝수
짝수의 경우
f(2) ⇒ 10 —→ '3' ⇒ 11
f(4) ⇒ 100 —→ '5' ⇒ 101
f(6) ⇒ 110 ...
f(8) ⇒ 1000 ...
f(10) ⇒ 1010 —→ '11' ⇒ 1011
즉 구해진 수에 +1만 더하면 된다.
반면 홀수의 경우
2. 홀수
f(1) ⇒ 1 —> '2' => 10
f(3) ⇒ 11 —→ '5' ⇒ 101
즉 가장 큰 단위의 1 부분의 앞부분인 0을 1로 바꾸어 큰 수를 만들고 그 다음 1을 0으로 바꾸어주는 규칙을 적용하면 된다.
바로 이러한 규칙을 찾는 것이 어려운 문제였다.
문자열도 대체가 안되기 때문에 그러한 부분을 고려한 문제로 조금 어려운 문제였던 것 같다.
def solution(numbers):
answer = []; strs='';
for num in numbers :
if num%2 == 0 :
answer.append(num+1)
else :
strs = bin(num)[2:]
for s in range(len(strs)-1,-1,-1) :
if strs[s] == '0' :
strs = strs[:s]+'10'+strs[s+2:]
answer.append(int(strs,2))
break
if s == 0 :
strs = '10' + strs[1:]
answer.append(int(strs,2))
break
return answer
'프로그래밍' 카테고리의 다른 글
[Graph] MST - Kruskal Algorithm - 백준 (0) | 2022.02.27 |
---|---|
[Graph] Bellman-Ford Algorithm, 최소비용 구하기 - 백준 (0) | 2022.02.26 |
[Back Tracking, 완전탐색] 약수의 갯수와 덧셈 - 프로그래머스 (0) | 2022.02.12 |
[Back Tracking] 연산자 끼워넣기 - 백준 (0) | 2022.02.12 |
[Graph, DP] 점프 - 백준 (0) | 2022.02.12 |