반응형
https://www.acmicpc.net/problem/9081
9081번: 단어 맞추기
입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알
www.acmicpc.net
해결 방법 : 구현
- 사전순으로 다음으로 올 단어를 어떻게 판단할지, 로직을 짜야한다.
- permutation으로 구하면 최대 10! 개의 단어들이 생성 될 것이다.
- 사전순으로 더 늦게 나오는 단어가 되기 위해서는, 단어의 가장 마지막부터 양옆 문자를 비교하다가,
- word[i-1] < word[i] 인 경우가 생긴다면 word[i-1]이 뒤로 가야 한다.
- i-1번째 문자는 word[i-1]보다 큰 최소의 문자가 되어야 한다.
- 나머지는 사전순 정렬해야 한다.
import sys
input = sys.stdin.readline
def solution(word):
for i in range(len(word)-1, 0, -1): # 마지막 문자들 부터 비교
if word[i-1] < word[i]: # word[i-1]이 변경점
order = sorted(list(word[i-1:]))
for c in order: # word[i-1] 보다 큰 최소의 문자를 찾는다.
if word[i-1] < c:
order.remove(c) # word[i-1]을 대체할 문자 'c'를 한개 제거
return word[:i-1] + c + ''.join(order)
return word
if __name__ == '__main__':
T = int(input())
for _ in range(T):
word = input().strip()
result = solution(word)
print(result)
반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
백준 3182 : 한동이는 공부가 하기 싫어! (0) | 2021.08.14 |
---|---|
백준 3077 : 임진왜란 (0) | 2021.08.12 |
백준 5710 : 전기 요금 (0) | 2021.08.10 |
백준 10026 : 적록색약 (0) | 2021.08.09 |
백준 7562 : 나이트의 이동 (0) | 2021.08.09 |