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로 가는지 알아내 출력한다.
문제 풀이 과정
- 수를 입력받고 단계를 저장하는 변수를 초기화한다.
- 새로운 숫자가 6174가 아닐 동안 3-4 과정을 반복한다.
- 단계를 1 추가하고, 새로운 수로 만들 수 있는 가장 큰 수에서 가장 작은 수를 빼서 또다시 새로운 수를 만든다.
- 새로운 수가 네 자릿수가 안되면, 0을 추가하여 네 자릿수로 맞춘다.
- 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
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 3060 욕심쟁이 돼지 (Python / 파이썬) (0) | 2021.08.27 |
---|---|
[BaekJoon] 백준 3041 N-퍼즐 (Python / 파이썬) (0) | 2021.08.27 |
[BaekJoon] 백준 1296 데이트 (Python / 파이썬) (0) | 2021.08.27 |
[BaekJoon] 백준 11070 피타고라스 기댓값 (Python / 파이썬) (1) | 2021.08.27 |
[BaekJoon] 백준 14647 준오는 조류혐오야!! (Python / 파이썬) (0) | 2021.08.26 |
댓글