Dev/PS

[Python] 백준 1251번 - 단어 나누기

H_W_I 2023. 3. 3. 17:36

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

 

1251번: 단어 나누기

알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다

www.acmicpc.net

풀이

입력값의 최대 길이가 50이고 제한시간이 2초라서 브루트포스로 풀 수 있는 문제이다. 문제의 지시에 따라 코드를 구현하면 된다.

  1. 입력 받은 단어를 세 단어로 나눈다.
  2. 나누어진 단어들을 뒤집는다.
  3. 나누었던 세 단어를 한 단어로 합친다.
  4. 만들어진 단어를 list에 저장해두었다가 정렬하여 가장 첫번째 있는 단어를 출력한다.

나는 단어를 세부분으로 나누면서 revesed()함수를 사용하여 문자열을 뒤집었다.

word = input()
words = []

for i in range(1, len(word)):
    for j in range(i + 1, len(word)):
        part1 = ''.join(reversed(word[:i]))
        part2 = ''.join(reversed(word[i:j]))
        part3 = ''.join(reversed(word[j:]))
        words.append(part1 + part2 + part3)

print(sorted(words)[0])

 

reversed 함수를 사용하면 반환값이 string이 아니기 때문에 결과를 string으로 만들어줘야한다. 이 과정을 없애기 위해서 인덱스 슬라이싱만 이용한 방법으로도 풀어보았다.

word = input()
words = []

for i in range(1, len(word)):
    for j in range(i + 1, len(word)):
        part1 = word[:i][::-1]
        part2 = word[i:j][::-1]
        part3 = word[j:][::-1]
        words.append(part1 + part2 + part3)

print(sorted(words)[0])