프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 1251 단어 나누기 Python

중규리 2024. 2. 5. 12:55

🐸 문제 정보

 

1251번: 단어 나누기

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

www.acmicpc.net

 

🤖 알고리즘

구현

 

⏱️ 풀이 시간

31.25m

 

📝 풀이

그리디처럼 풀면서 최적의 방법을 찾다가... 계속 틀리길래 '이게 맞나'란 생각이 들었다.

알고보니 그냥 생구현으로 풀 수 있는 아주 쉬운 문제였다ㅠㅠ

처음에는, 단어를 정렬해서 사전 순 앞에 나오는 문자의 인덱스를 뒤에서 부터 찾아내고 잘라서 넣는.. 과정을 거쳤다.

 

틀린 풀이

더보기
import sys
input = sys.stdin.readline

word = input().rstrip()
sw = sorted(word)
i = 0
idx = 0
cnt = 0
res = ''

while cnt < 2:
    if (cnt == 0) and (sw[i] in word[idx:-2]):
        temp = word[idx:-2].rindex(sw[i])
        res += word[idx:temp + 1][::-1]
        idx += temp + 1
        cnt += 1
    elif (cnt == 1) and (sw[i] in word[idx:-1]):
        temp = word[idx:-1].rindex(sw[i])
        res += word[idx:idx + temp + 1][::-1]
        idx += temp + 1
        cnt += 1
    i += 1

res += word[idx:][::-1]
print(res)

해답은 그냥 간단하게 자르는 구간 총 2개를 반복문 돌려서 찾아보고, 직접 정렬해서 실제로 사전순 앞에 있는 문자열을 고르면 되는 아주... 간단한 문제였다.

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

word = list(input().rstrip())
lw = len(word)
res = []

for i in range(1, lw - 1):
    for j in range(i + 1, lw):
       res.append(''.join(word[:i][::-1] + word[i:j][::-1] + word[j:][::-1]))

print(sorted(res)[0])