-
[백준] 10174번: 팰린드롬코딩(Coding)/백준 문제풀이 2020. 12. 29. 10:20728x90
링크: www.acmicpc.net/problem/10174
팰린드롬
문제
팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 단어나 숫자들을 말한다. 일반적으로 대소문자를 구분하지 않지만, 공백은 구분한다.
다음은 팰린드롬의 예시이다.
- Anna
- Harrah
- Arora
- Nat tan
- 9998999
- 123 321
- $$$&&$$$
모든 라인에 대해 팰린드롬인지 아닌지를 구분하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 n이 주어진다.
각 테스트 케이스는 한 줄의 텍스트로 이루어져있으며, 비어있는 줄은 없다.
출력
각 테스트 케이스에 대해 정답을 출력한다.
팰린드롬일 경우 "Yes"를 출력하고, 그렇지 않을 경우 "No"를 출력한다.
간단히 말해서 이 문제는 앞뒤로 읽었을때, 같은 글을 판단(대소문자 구분X, 공백은 무시)하는 문제이다.
문제접근
나는 이 문제의 접근을 어떻게 해야할까 고민을 했다. Python에서 기본으로 제공하는 내장함수를 이용해 입력으로 주어진 문자열을 모두 upper()를 이용해 대문자로 만들어주었다.(대소문자 구분X) 그리고 reverse()를 통해 역순으로 된 또 다른 문자열객체를 만들어서 0번인덱스 부터 차례로 같은지를 탐색하도록 설계했다.
코드
아래는 코드이다.
""" 백준 알고리즘 10174번: 팰린드롬 https://www.acmicpc.net/problem/10174 """ import sys def calc(): # txt1에 단어를 입력 txt1 = list(sys.stdin.readline()[:-1]) # txt1의 요소들 중에서 문자(isalpha)인 것을 모두 대문자(upper)로 변경 for i in range(len(txt1)): if txt1[i].isalpha() == True: txt1[i] = txt1[i].upper() # txt1의 역순으로 저장된 txt2를 생성 txt2 = list(txt1) txt2.reverse() # txt1과 txt2를 순차적으로 비교하고 # 서로 다른 요소일때 바로 "No"를 리턴 result = "No" for i in range(len(txt1)): if(txt1[i] == txt2[i]): result = "Yes" else: result = "No" break; return result def main(): n = sys.stdin.readline() n = int(n) for i in range(n): print(calc()) if __name__ == '__main__': main()
그냥 위에서 설계한 내용 그대로 구현하였다.
문자열과 관련된 문제는 아무래도 Python이 편한거 같다.
728x90'코딩(Coding) > 백준 문제풀이' 카테고리의 다른 글
[백준] 1920번: 수 찾기 (0) 2020.12.30 [백준] 7785번: 회사에 있는 사람 (0) 2020.12.29 [백준] 1037번: 약수 (0) 2020.12.28 [백준] 17608번: 막대기 (0) 2020.12.24 [백준] 8958번: OX퀴즈 (0) 2020.12.24