코테 노트/프로그래머스

Level 2 다음 큰 숫자 Python 3

화요밍 2021. 1. 21. 22:05
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/12911?language=python3

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

최종 풀이

 

hwayeon351/Programmers-Algorithms

프로그래머스 코딩테스트 풀이. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def solution(n):
    bin_n = str(bin(n))[2:]
    num_n = 0
    for i in bin_n:
        if i == '1': num_n += 1
    for n1 in range(n+1, 1000065):
        bin_n1 = str(bin(n1))[2:]
        num_n1 = 0
        for i in bin_n1:
            if i == '1': num_n1 += 1
        if num_n1 == num_n:
            return n1

 

 


풀이 과정

풀이 시간  10분

1. n의 이진수 변환 및 1의 개수 구하기

    bin_n = str(bin(n))[2:]
    num_n = 0
    for i in bin_n:
        if i == '1': num_n += 1

 먼저, 10진수의 n을 2진수로 변환해야한다.

파이썬에서는 10진수를 2진수로 변환하는 bin()이라는 내장함수가 있다. (아래 참고자료를 참고하자.)

bin(n)을 하면 0b1111이 출력됨을 확인하고 나는 이를 문자열로 변환해 2번째 인덱스부터 bin_n에 넣었다.

그 다음 for문을 통해 bin_n에 1을 num_n에 카운팅 해주었다.

 

 

2. 다음 큰 숫자 구하기

    for n1 in range(n+1, 1000065):
        bin_n1 = str(bin(n1))[2:]
        num_n1 = 0
        for i in bin_n1:
            if i == '1': num_n1 += 1
        if num_n1 == num_n:
            return n1

 이제, 이진수 n의 1의 개수와 같으면서 다음으로 큰 숫자를 구해야한다.

문제의 제한 사항은 n이 1,000,000 이하의 자연수라는 것이다. 그렇다면 n = 1,000,000이면 다음 큰 숫자는 n = 1,000,064인 것을 알 수 있다.

따라서, for문의 범위를 n+1부터 1000065까지로 설정하여 발생되는 n1을 통해 다음 큰 숫자를 찾아준다.

  1. n1을 n과 같은 방법으로 2진수로 변환해 문자열로 bin_n1에 담아준다.
  2. bin_n1의 1의 개수를 카운팅하여 num_n1에 담는다.
  3. num_n1 == num_n이면 n1이 다음 큰 숫자이다.

 


다른 사람의 풀이

def solution(n):
    c = bin(n).count('1')
    for m in range(n+1,1000065):
        if bin(m).count('1') == c:
            return m

 내가 푼 방법과 똑같지만 코드가 훨씬 더 간결하다.

먼저, 이진수로 변환하여 1의 개수만 세어주면 되기 때문에 접두어인 0b를 없애기 위한 문자열 슬라이싱을 하지 않았다.

또한, 파이썬 문자열 내장함수인 count()를 활용해서 간단하게 1의 개수를 구했다. (이 문제에서 사용된 내장함수들은 아래 참고자료를 확인하자.)

이렇게 내장함수를 적절하게 활용하여 코드를 작성하는 것이 훨씬 더 효율적인 것 같다.


참고

 

bin, oct, hex

 bin, oct, hex는 10진수를 2진수로 변환시켜 문자열 형태로 반환해주는 파이썬 내장 함수이다. bin(n) 10진수 n을 2진수로 변환하여 문자열 형태로 반환 접두어 0b oct(n) 10진수 n을 10진수로 변환하여 문

hwayomingdlog.tistory.com

 

count, len

count, len은 파이썬 문자열 내장 함수이다. s.count('t') 문자열 s 중 't'의 개수를 반환 len(s) 문자열 s의 사이즈를 반환

hwayomingdlog.tistory.com

 

728x90
반응형