본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 9047 6174 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 27.
728x90
반응형

BaekJoon 백준 9047 6174 문제는 Kaprekar 연산을 반복하다 보면 한 숫자로 이루어지지 않은 모든 네 자릿수는 Kaprekar 연산을 통해 6174로 가게 된다. 숫자가 주어졌을 때 몇 단계만에 6174로 가는지 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 9047 6174 문제 정보

출처

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

알고리즘 분류

- 수학, 사칙연산, 시뮬레이션, 구현

난이도

- 브론즈 1 / Bronze 1

 

6174 문제 요약

  • Kaprekar 연산은 네 자릿수 중 모든 자릿수가 같지 않은 수(1111, 2222 등을 제외한)의 각 자리의 숫자를 재배열해서 만들 수 있는 가장 큰 수와 가장 작은 수를 만들어서 그 차이를 계산하는데, 그 결과로 나온 새로운 숫자를 갖고 같은 과정을 반복하는 것이다. 
  • 간단한 연산이지만 Kaprekar는 이 연산이 놀라운 결과를 보여준다는 것을 발견했다.
  • 한 숫자로 이루어지지 않은 모든 네 자릿수는 Kaprekar 연산을 통해 6174로 가게 된다.
  • 숫자가 입력으로 주어졌을 때 몇 단계만에 6174로 가는지 알아내 출력한다.

 

문제 풀이 과정

  1. 수를 입력받고 단계를 저장하는 변수를 초기화한다.
  2. 새로운 숫자가 6174가 아닐 동안 3-4 과정을 반복한다.
  3. 단계를 1 추가하고, 새로운 수로 만들 수 있는 가장 큰 수에서 가장 작은 수를 빼서 또다시 새로운 수를 만든다.
  4. 새로운 수가 네 자릿수가 안되면, 0을 추가하여 네 자릿수로 맞춘다.
  5. 6174가 되면 반복을 마치고 단계를 출력한다.

 

코드 및 설명
for _ in range(int(input())):
    num = int(input())
    cnt = 0
    while num != 6174:
        cnt += 1  # 단계 추가
        n = list(str(num))
        num = int(''.join(sorted(n, reverse=True))) - int(''.join(sorted(n)))
        # 새로운 수가 네 자릿수가 안되면, 0을 추가하여 네 자릿수로 맞춘다.
        if num < 1000:
            strNum = str(num)
            for _ in range(4 - len(strNum)):
                strNum += '0'
            num = int(strNum)

    print(cnt)

BaekJoon 백준 9047 6174 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글