본문 바로가기
코딩테스트

[백준] 2992 크면서 작은 수 - Python

by CuckooBird 2023. 2. 16.

백준 실버3 2992 크면서 작은 수 - Python

https://www.acmicpc.net/problem/2992

 

2992번: 크면서 작은 수

정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이

www.acmicpc.net


문제


코드

맞았습니다가 뜬 코드입니다. - 메모리 31256KB | 시간 48ms | 코드 길이 559B

import sys
input = sys.stdin.readline
n = input().rstrip()
number = ""
minNumber = "999999"
N = len(n)
used = [False] * N
def backtrack(depth):
    global number
    global minNumber
    if depth == N:
        if n < number < minNumber:
            minNumber = number
        return None
    for i in range(N):
        if used[i] == True:
            continue
    used[i] = True
    number += n[i]
    backtrack(depth + 1)
    used[i] = False
    number = number[:-1]
backtrack(0)
if minNumber == '999999':
  minNumber = 0
print(minNumber)

다른 분의 코드를 참고했습니다. (출처 하단)

 

백트래킹을 구현한 함수를 이용하는 방법입니다.


Try 1.

import sys
input = sys.stdin.readline
n = list(int(input()))
nReverse = list(reversed(n))
result = list()
N = len(n)
for _ in range(N):
    cnt = 0
    for i in range(N):
        if nReverse[i] > nReverse[i+1]:
            nReverse[i], nReverse[i+1] = nReverse[i+1], nReverse[i]
            result.append(int(''.join(nReverse)))
            cnt += 1
    if cnt == 0:
        result.append(0)
        break
temp = list(str(max(result)))
temp = list(reversed(temp))
print(''.join(temp))

문자열을 뒤집어서 해결하려고 했는데 절대 안 되더라고요..


Search 🔍

 


후기

코딩할 때 로파이 들으라는데 전 듣다보면 답답하고 화가 나더라고요

 

생각해보면 문제가 그냥 답답하고 화나는 문제가 아닌가 싶기도 하네요