Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

BOJ 9047번 - 6174 본문

💯 알고리즘/백준 온라인 저지

BOJ 9047번 - 6174

Chamming2 2021. 4. 10. 21:25

[백준 온라인 저지 링크]

 

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
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆