자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[탐색][시뮬레이션] - 회문 문자열 검사(String)

얄루몬 2022. 7. 1. 14:15

문제

  • 주어진 n개의 수만큼 문자를 입력하고 그 문자가 회문인지를 판단하라
  • 이때 대소문은 구분하지 않는다.
  • 회문이란?
    • 앞으로 해도 거꾸로해도 똑같은 것을 의미한다. like 이효리~!(이효이)

문제 풀이 - 1

import sys
sys.stdin = open("input.txt", "r")

n = int(input())

for i in range(n):
    s = input()
    s = s.lower()
    size = len(s)

    for j in range(size//2):
        if s[j] != s[-j-1]:
            print(f"#{i+1} NO")
            break
    else:
        print(f"#{i+1} YES")

  • 문자열 길이의 절반만 검증하는 이유는 앞에서 뒤에서 같이 오기 때문이다. 
    • 해당 문자열 길이의 몫 값만큼만 반복문을 돌면 된다.
  • 한 글자라도 다르다면 회문이 아니기 때문에 NO를 출력해준 뒤 break로 반복문을 중단 시킨다.
  • for문이 정상적으로 돌았다면 YES를 출력해준다.

문제 풀이 - 2

import sys
sys.stdin = open("input.txt", "r")

n = int(input())

for i in range(n):
    s = input()
    s = s.lower()
    if s == s[::-1]:
        print(f"#{i+1} YES")
    else:
        print(f"#{i+1} NO")
  • s[::-1]는 문자열을 완전히 뒤집은 상태를 말하기에 이를 비교해서 같으면 회문, 아니라면 회문이 아닌 단어가 된다.