| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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
                              
                          
                            
                            - k8s
- docker
- 타입스크립트
- 파이썬
- BFS
- 이슈
- 자바스크립트
- 쿠버네티스
- 컴퓨터공학
- 클라우드
- kubernetes
- 솔리디티
- 알고리즘
- 백엔드
- HTML
- AWS
- 이더리움
- VUE
- JavaScript
- TypeScript
- 리액트
- 블록체인
- es6
- 가상화
- 백준
- next.js
- 프론트엔드
- 웹
- react
- CSS
                              Archives
                              
                          
                            
                            - Today
- Total
 
              
              즐겁게, 코드
BOJ 9047번 - 6174 본문
9047번: 6174
입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스마다 한 줄에 네 자리 수(1000~9999)가 하나씩 주어진다. 단,
www.acmicpc.net
기초 테스트 문제로 올라와 풀어본 문제였는데, 생각보다 까다로운 문제였습니다.
숫자 문자열의 (내림차순 정렬 결과) - (오름차순 정렬 결과)를 계속 구해주면 간단하게 답을 찾을 것 같지만...

아무 생각 없이 덤비면 피로 얼룩진 결과창을 보게 됩니다.
시간 초과의 이유는 바로 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
      
    
  
      
  
              
              
              
              
              
              
              
              소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
                와!! 바로 눌러야겠네요! 😆
               
                   
                   
                  