본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 23304.아카라카

by 뭉망뭉 2023. 7. 27.

백준 문제 링크: https://www.acmicpc.net/problem/23304

핵심 아이디어

재귀로 풀면 된다. 현재 보는 문자열이 팰린드롬인지 체크하고, 맞다면 그 절반을 확인하면 된다.

왼쪽에서 절반과 오른쪽에서의 절반이 동일하다면 둘 중 하나(동일하니까)를 재귀를 돌리면 된다.

오른쪽 절반의 경우 string[half_len :]으로 한다면 홀수, 짝수인 경우의 수를 나눠 string[half_len + 1 :]도 커버해 줘야 하기 때문에 그냥 뒤에서부터 봐서 string[-half_len :]으로 했다.

풀이

# silver2-23304. 아카라카

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

# 주어진 문자열이 아카라카 팰린드롬인지 아닌지 출력
# 아카라카 팰린드롬: 팰린드롬(거꾸로 뒤집어도 같은 문자열)인데 1/2 길이의 접두사와 접미사가 모두 팰린드롬

s = input().rstrip()

def is_akaraka_pallendrom(string):
    if len(string) == 1: return True
    half_len = len(string) // 2
    if string != string[::-1]:
        return False
    left = string[: half_len]
    right = string[-half_len :]
    if left != right:
        return False
    if not is_akaraka_pallendrom(left): 
        return False
    
    return True

if is_akaraka_pallendrom(s):
    print("AKARAKA")
else: print("IPSELENTI")

Trouble Shooting

half_len을 구하는 로직을 재귀함수 안에 넣어야 했는데 그러지 않고 인풋 받고 절반을 구해버려서 절반 길이가 고정되어 재귀를 계속 돌았다.

실행 시간

메모리 36628KB, 시간 72ms (python3)

'ALGORITHM > 백준' 카테고리의 다른 글

[BOJ/PYTHON] 1759. 암호 만들기  (0) 2023.07.27
[BOJ/PYTHON] 10597. 순열장난  (0) 2023.07.27
[BOJ/PYTHON] 1764. 듣보잡  (0) 2023.07.27
[BOJ/PYTHON] 16916. 부분 문자열  (0) 2023.07.27
[BOJ/PYTHON] 1701. Cubeditor  (0) 2023.07.27

댓글