728x90
시간 제한 2초, 메모리 제한 128MB
# 조건
- 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다.
- 규완이는 팰린드롬을 엄청나게 좋아한다.
- 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.
- 동호는 규완이를 위한 깜짝 선물을 준비했다.
- 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다.
- 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.
- 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.
입력
- 첫째 줄에 문자열 S가 주어진다.
- S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.
출력
- 첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.
# 접근 방법
- 반복문을 이용하여 팰린드롬이 주어진 문자열 내에 존재하는지 확인하면 된다.
- 핵심은 word[i:] == word[i:][::-1]이 참이되는지 확인하는 것이다.
- 즉, abaab란 문자열이 존재할 때 i = 1인 경우 baab는 팰린드롬인게 확인디 되므로
- 전체 문자열 길이 -1 + (i+1) = len(word) + i => 즉 0번쨰의 a 1개만 더 더해주면 팰린드롬이 완성되기 때문이다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
word = str(input())
# 반복문을 통해 문자를 확인
for i in range(len(word)):
# i번째로 시작한 문자열과 i번째로 시작한 문자를 뒤에서부터 확인한 문자열을 확인
# 같을 경우 i번째 이전에 문자가 다른 것으로 문자열 뒤에 추가해주면 된다.
if word[i:] == word[i:][::-1]:
print(len(word) + i)
break
728x90
'ALGORITHM > 정렬, 탐색,구현' 카테고리의 다른 글
[백준 16926번] 파이썬 - 배열 돌리기1 (0) | 2023.09.08 |
---|---|
[백준 22862번] 파이썬 - 가장 긴 짝수 연속한 부분 수열(Large) (0) | 2023.09.07 |
[백준 1300번] 파이썬 - K번째 수 (0) | 2023.09.04 |
[백준 17144번] 파이썬 - 미세먼지 안녕! (0) | 2023.09.03 |
[백준 12871번] 파이썬 - 무한 문자열 (0) | 2023.08.31 |