https://www.acmicpc.net/problem/2993
2993번: 세 부분
첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다.
www.acmicpc.net
문자열의 길이가 최대 50이기 때문에 가능한 모든 경우를 살펴보는 브루트 포스를 이용하여 풀었다.
세 부분으로 나누기 위해서는 두 포인트가 필요하므로 for 문을 이용해 가능한 모든 두 포인트를 구하였고, 각각의 포인트 별로 세 부분으로 나누어 거꾸로 이어붙였다. 그리고 동시에 사전순으로 가장 빠른 문자열을 ans에 갱신하였다.
파이썬에서 문자열을 거꾸로 정렬하는 방법을 잘 기억해놓아야 할 것 같다.
import sys
word = sys.stdin.readline().rstrip()
l = len(word)
ans = "z"*50
for i in range(1, l-1):
for j in range(i+1, l):
a = ''.join(reversed(word[0:i]))
b = ''.join(reversed(word[i:j]))
c = ''.join(reversed(word[j:l]))
tmp = a+b+c
if (tmp < ans):
ans = tmp
print(ans)
'알고리즘💻 > Bruteforce&Backtracking' 카테고리의 다른 글
BOJ 1182번: 부분수열의 합 (0) | 2021.07.25 |
---|---|
BOJ 14889번: 스타트와 링크 (0) | 2021.07.25 |
BOJ 14888번: 연산자 끼워넣기 (0) | 2021.03.24 |
BOJ 10448번: 유레카 이론 (0) | 2021.03.23 |
BOJ 2580번: 스도쿠 (0) | 2021.01.17 |