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

 

2993번: 세 부분

첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다.

www.acmicpc.net

 

[풀이 방법]

1. 세 부분으로 나누다. 

2. 나눈 단어를 각각 순서를 뒤집는다.

3. 세 단어를 합친다.

 

브루트 포스로 쪼갤 수 있는 모든 경우의 수로 쪼개고 위의 방식을 반복한다.

쪼갤 때에는 두 개의 포인터가 있다고 생각하고, 앞에서 부터 쪼갤 위치, 뒤에서 부터 쪼갤 위치를 준다.

 

예제에 있는 mobitel을 예시로 들면 다음과 같이 쪼갤 수 있다.

 

단어를 나누는 것과, range 에 대한 index에서 버벅였다.

 

import sys

input = sys.stdin.readline

word = input().strip()
ans = word
n = len(word)


for i in range(1,n-2):                #앞 포인트
    for j in range(n-1,i,-1):       #뒷 포인트
        new = word[0:i][::-1] + word[i:j][::-1] + word[j:][::-1]
        if new < ans:
            ans = new
print(ans)

+ Recent posts