일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- react
- kubernetes
- TypeScript
- 이더리움
- 이슈
- 블록체인
- 자바스크립트
- es6
- next.js
- docker
- 프론트엔드
- 컴퓨터공학
- HTML
- 솔리디티
- 리액트
- node.js
- k8s
- BFS
- AWS
- 타입스크립트
- 클라우드
- CSS
- 쿠버네티스
- 웹
- 백엔드
- 백준
- 가상화
- 파이썬
- 알고리즘
- JavaScript
Archives
- Today
- Total
즐겁게, 코드
BOJ 9047번 - 6174 본문
기초 테스트 문제로 올라와 풀어본 문제였는데, 생각보다 까다로운 문제였습니다.
숫자 문자열의 (내림차순 정렬 결과) - (오름차순 정렬 결과)를 계속 구해주면 간단하게 답을 찾을 것 같지만...
아무 생각 없이 덤비면 피로 얼룩진 결과창을 보게 됩니다.
시간 초과의 이유는 바로 1000과 9998 두 개의 케이스 때문으로, 두 케이스는 다음 결과를 얻게 됩니다.
(+ 이 둘은 제가 발견한 일부로, 찾지 못한 케이스가 더 있을수도 있습니다!)
[함정 케이스 1. 1000]
1000 - 0001 = 999
999 - 999 = 0 => 무한 루프
[함정 케이스 2. 9998]
9998 - 8999 = 999
999 - 999 = 0 => 무한 루프
바로 이래서 시간 초과를 만나게 되는 건데요, 따라서 연산 결과 문자열이 4자리 미만일 경우에는 앞에 "0" 을 채워주는 작업이 필요합니다.
[정답 코드 - Python]
T = int(input())
for i in range(T):
ans = 0
S = input()
while S != "6174":
s_bigger = int(''.join(sorted(S, reverse=True)))
s_smaller = int(''.join(sorted(S)))
S = str(s_bigger - s_smaller)
if len(S) < 4:
temp = ""
for i in range(4 - len(S)):
temp += '0'
S = temp + S
ans += 1
print(ans)
+ 여담이지만 문제의 Kaprekar 연산이 매우 신기했던 문제입니다.
소개팅할때 풀기 좋은 썰이 될 듯 하네요 ✦‿✦
반응형
'💯 알고리즘 > 백준 온라인 저지' 카테고리의 다른 글
BOJ 1926번 - 그림 (0) | 2021.04.12 |
---|---|
BOJ 17206번 - 준석이의 수학 숙제 (0) | 2021.04.12 |
BOJ 2178번 - 미로 탐색 (0) | 2021.04.02 |
BOJ 2667번 - 단지번호붙이기 (1) | 2021.03.29 |
BOJ 1012번: 유기농 배추 (0) | 2021.03.13 |
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆