문제풀이/구현

[Python/파이썬] 백준 2877번 4와 7

딜레이레이 2023. 6. 9. 17:19
 

2877번: 4와 7

창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제

창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 K(1 ≤ K ≤ 109)가 주어진다.


출력

첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다.


코드

bin_k = bin(int(input())+1)
ans = ''
for i in bin_k[3:]:
    if i == '0':
        ans += '4'
    else:
        ans += '7'
print(ans)

숫자가 2개라는 점에서 이진수로 변환해서 풀면 되겠다는 힌트를 얻었다.

 

이렇게 하나씩 써보니 규칙이 보였다. 

입력받은 수+1을 이진수로 변환하여 맨 앞자리를 제외하고 보면 규칙을 찾을 수 있었다. k+1을 이진수로 치환한 수에서 0을 4, 1을 7로 치환하면 창영이가 k번째로 좋아하는 수이다.

 

다 풀고 다른 사람들의 풀이를 찾아보니 format과 replace 함수를 써서 간결하게 코딩한 코드도 있었다.

k = format(int(input())+1, 'b')
print(k[1:].replace('0', '4').replace('1', '7'))

format(숫자, 'b')를 하면 접두어 '0b'가 빠진 이진수 문자열을 바로 얻을 수 있다.