새해를 맞아 1일 1커밋을 하겠다는 목표로 씻고 나와서 밤늦게 풀어낸 문제다. 정답률 높은 순서의 위쪽 문제를 골랐더니 쉬워서 5분이 채 걸리지 않았다.
프로그래머스 <다음 큰 숫자> 문제 보기
https://school.programmers.co.kr/learn/courses/30/lessons/12911
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 <다음 큰 숫자> 문제 풀이
def solution(n):
answer = n+1
check_n = 0
check_answer = 0
for i in bin(n):
if i == '1':
check_n += 1
while(1):
for i in bin(answer):
if i == '1':
check_answer += 1
if check_answer == check_n:
break
check_answer = 0
answer += 1
return answer
효율성 테스트에서 긴가민가 했지만 다행히 바로 통과할 수 있었다. 문제를 풀고 나면 다른 사람의 풀이를 간단하게라도 둘러보는 것이 습관이 되었는데, 내가 for 반복문을 통해 찾아낸 1을 count로 더 간단하게 찾아내는 방법이 있었다.
다른 풀이
def solution(n):
answer = n+1
check = bin(n).count('1')
while True:
if check == bin(answer).count('1'):
return answer
answer += 1
while(1)은 python 같지 않은 느낌이 들어 while True로 바꿔주었다.
이 풀이에서 한 가지 의문점이 있다. 아래와 같이 코드를 작성했을 때는 시간 초과로 풀이가 통과되지 않았다.
def solution(n):
answer = n+1
check = bin(n).count('1')
while True:
if check == bin(answer).count('1'):
break
answer += 1
return answer
break를 걸어 while문을 나가 return 해주는 것과 해당 지점에서 바로 return 해주는 것의 차이가 무엇인지 잘 모르겠다. 아래 코드가 더 좋다고 생각했는데 아닐 수도 있겠다는 생각이 들었고, 해당 문제의 [질문하기] 란에 궁금증을 남겨놓은 상태다.
이 외에도 다른 풀이들도 많았지만 최근에 문제가 개편되는 바람에 통과되지 않는 풀이가 많았다.
내일도 열심히 살기 위해 이만 자러 가야겠다. 2023년 새해에도 모두 건강하세요 :)
'알고리즘 공부 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스 Level 2] 멀리 뛰기 (Python 파이썬) 풀이 방법 (2) | 2023.01.04 |
---|---|
[프로그래머스 Level 2] 프린터 (Python 파이썬) 풀이 방법 (0) | 2023.01.04 |
[프로그래머스 Level 2] 다리를 지나는 트럭 (Python 파이썬) 풀이 방법 (2) | 2023.01.03 |
[프로그래머스 Level 2] 짝지어 제거하기 (Python 파이썬) 풀이 방법 (0) | 2023.01.03 |
[프로그래머스 Level 2] 숫자의 표현 (Python 파이썬) 풀이 방법 (0) | 2023.01.01 |