개발바닥

BOJ_9081 [ 단어 맞추기 ] 본문

[ Algorithm ]/ [ BOJ ]

BOJ_9081 [ 단어 맞추기 ]

라이언 2023. 3. 12. 20:35
반응형

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

 

9081번: 단어 맞추기

입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알

www.acmicpc.net

 

문제 풀이

 

 주어진 문자에 다음 문자를 찾는 문제이다.
 다음 문자를 찾기 위해서 알파벳 간에 비교를 통해 변경할 위치를 찾는다.
 

변경할 위치가 i,j 라면 

 i는 arr[i-1] < arr[i] 조건에 해당되는 i 최댓값을 찾는다.
 j는 arr[i-1] < arr[j] 조건에 해당되는 j 최댓값을 찾는다.

그 후 arr[i-1] <-> a[j] 알파벳 변경 위치를 변경한다.

arr[i:] 이후 문자 오름차순 정렬 후 붙이면 된다.

 

 

정답 소스 

from sys import stdin

for t in range(int(stdin.readline())):
    inputString = list(stdin.readline().rstrip())
    length = len(inputString)
    i, j = 0, 1
    # 바꿀 위치 찾는다.
    for idx in range(1, length):
        if inputString[idx] > inputString[idx - 1]:
            if i < idx:
                i = idx
    for idx in range(1, length):
        if inputString[idx] > inputString[i - 1]:
            if j < idx:
                j = idx

    if i != 0 and j != 0:
        inputString[i-1], inputString[j] = inputString[j], inputString[i-1]
        inputString[i:] = sorted(inputString[i:])
    print(''.join(inputString))

 

반응형

'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글

BOJ_5397 [ 키로거 ]  (0) 2023.03.04
BOJ_15653 [ 구슬 탈출4 ]  (0) 2020.06.30
BOJ_10942 [ 팰린드롬? ]  (1) 2020.06.09
BOJ_14442 [ 벽 부수고 이동하기 2 ]  (0) 2020.06.07
BOJ_16935 [ 배열 돌리기 3 ]  (0) 2020.05.07
Comments