알고리즘 공부/코딩테스트(프로그래머스)

[프로그래머스 Level 2] 다음 큰 숫자 (Python 파이썬) 풀이 방법

yepppi 2023. 1. 2. 00:25
반응형
SMALL

새해를 맞아 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년 새해에도 모두 건강하세요 :)

반응형
LIST