백준 실버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 🔍
- 코드 참고 출처 > https://merrily-code.tistory.com/210
- 백트래킹 출처 > https://chanhuiseok.github.io/posts/algo-23/
> https://veggie-garden.tistory.com/24
후기
코딩할 때 로파이 들으라는데 전 듣다보면 답답하고 화가 나더라고요
생각해보면 문제가 그냥 답답하고 화나는 문제가 아닌가 싶기도 하네요
'코딩테스트' 카테고리의 다른 글
[백준] 15649번 N과 M (1) - Python (1) | 2023.02.17 |
---|---|
[백준] 10025번 게으른 백곰 - Python (1) | 2023.02.17 |
[백준] 1448번 삼각형 만들기 - Python (3) | 2023.02.16 |
[백준] 1213 팰린드롬 만들기 - Python (3) | 2023.02.15 |
[백준] 1951 활자 - Python (3) | 2023.02.15 |