[Python] 백준 2877 4와 7 (구현)

📌 문제

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

입력

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

출력

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

예제 입력 1

1

예제 출력 1

4

예제 입력 2

2

예제 출력 2

7

예제 입력 3

3

예제 출력 3

44

📌 풀이

💬 Code

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

💡 Solution

규칙을 찾는 게 관건이었던 문제. n번째를 나타내는 n을 먼저 이진수로 바꾸고, n번째 수를 4는 0으로, 7은 1로 바꿔보면 규칙이 보인다. n의 가장 앞자리를 생략하면 n-1번째 수가 된다.

따라서 n번째 수를 찾으려면 n+1을 이진수로 바꾸고 가장 앞자리를 절삭한 후 0과 1을 다시 4와 7로 바꿔주면 된다.

format으로 진수 변환

format() 내장 함수를 이용하면 숫자를 다른 진수의 문자열로 바꿀 때 접두어(0b, 0o, ox 등)를 제외할 수 있다.

>>> format(42, 'b') # 2진수
'101010'
>>> format(42, 'o') # 8진수
'52'
>>> format(42, 'x') # 16진수
'2a'

좋은 웹페이지 즐겨찾기