ALGORITHM/PYTHON

백준 BAEKJOON 9047번 6174 [PYTHON/파이썬]

칼코
반응형

 

 

 

 

 

백준 BAEKJOON 9047번 6174 [PYTHON/파이썬]


<문제 출처> (BRONZE Ⅰ)

https://www.acmicpc.net/problem/9047

 

9047번: 6174

1949 년 인도 수학자 Kaprekar 는 Kaprekar 연산을 고안해냈다. Kaprekar 연산은 네 자리 수 중 모든 자리수가 같지 않은 수(1111, 2222 등을 제외한)의 각 자리의 숫자를 재배열해서 만들 수 있는 가장 큰 수

www.acmicpc.net

 

 

 

 

 

 

<풀이>

for문과 while문을 함께 사용하여 풀었다.

 

1. 주어지는 수가 6174이면 바로 종료

2. 그렇지 않다면 단계의 수(cnt)에 1을 더해주고 주어지는 수를 재배열하여 가장 큰 수(내림차순)와 가장 작은 수(오름차순)을 변수 a, b에 저장

3. a에서 b를 뺀 값의 길이가 4자리 수가 아니라면 차이만큼 뒤에 0을 추가

4. 1~3번을 반복

 

 

 

 

 

 

 

<코드>

import sys
input = sys.stdin.readline

T = int(input())

for _ in range(T):
    N = input().rstrip() # 주어지는 수
    cnt = 0

    while N != "6174":
        cnt += 1	# 단계 추가

        a = int("".join(sorted(N, reverse=True)))	# 가장 큰 수
        b = int("".join(sorted(N)))	# 가장 작은 수
        N = str(a - b)

        if len(N) < 4:	# 새로운 수의 길이가 네 자릿수가 아니라면
            for _ in range(4 - len(N)):
                N += "0"	# 0을 추가하여 네 자릿수를 맞춤

    print(cnt)

 

 

 

 

 

 

 

 

반응형