알고리즘/백준 문제풀이

[Python/BOJ] 백준 15927 회문은 회문이 아니야!!_문자열

개발자 덕구🐾 2022. 8. 10. 21:53
728x90

 

 

 

처음에 정직하게 풀려고 했으나 계속 시간초과가 발생했다.

역시 사람이 머리를 써야 문제가 풀린다. 

 

 

이 문제는 3가지로 상황을 나누어 풀어야한다.

 

1.  회문일 경우 

     -> 전체 길이 -1 

1-2. 회문인데 전부 똑같은 문자열 일경우 

     -> -1 

2. 회문이 아닐 경우 

    -> 전체 길이

 

 


 

코드 : 

# 팰린드롬인지 확인 
def palin(search) :
    for i in range(len(search)//2) :
        if search[i] != search[-(i+1)] :
            return False 
    return True 

# 전부 같은 문자열인지 확인 
def same(search) :
    for i in range(1,len(search)) :
        if search[i] != search[0] : return False 
    return True 

if __name__=="__main__" :
    char = input()
    #  회문일 경우 
    if palin(char) :
        # 모두 같으면 -1  아니면 전체길이에서 -1 
        print(-1 if same(char) else len(char)-1)
    # 회문이 아닐 경우
    else :
        print(len(char))

 

같은 문자열인 것은 same이라는 함수를 만들어 모든 문자가 처음 문자와 같은지 확인하는 역할을 수행했다.

 

palin이라는 함수는 팰린드롬 여부를 확인하는데 길이를 반으로 나누어 앞에 문자와 뒤에 문자가 같은지 확인한다. 

 

 

 

 

참고 블로그 : 

https://wantchicken.tistory.com/60

 

백준 15927: 회문은 회문아니야!! [파이썬]

https://www.acmicpc.net/problem/15927 15927번: 회문은 회문아니야!! 팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 AB

wantchicken.tistory.com

 

 

 

 

 

 

 

반응형