minzee
개발 기록장
minzee
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • 회고록 (0)
    • 활동 (15)
      • 우아한테크코스 7기 FE 프리코스 (4)
      • 원티드 프리온보딩 FE 챌린지 (1)
      • 위니브 엠버서더 3기 (10)
    • CS 공부 (5)
    • 코테 공부 (44)
      • BOJ (33)
      • Computer Algorithm (10)
      • Data Structures (1)
    • 개발 공부 (25)
      • Modern JS Deep Dive (5)
      • JavaScript & TypeScript (3)
      • React (0)
      • React-Native (0)
      • HTML & CSS (7)
      • Git & GitHub (1)
      • Kotlin (2)
      • Python (3)
      • C++ (2)
      • Linux (1)
    • 학교 (3)
      • 2 - 1 학기 (3)
      • 4 - 1 학기 (0)
    • 자격증 (1)
      • TOPCIT (0)
      • 정보처리기사 (1)
      • SQLD (0)

블로그 메뉴

  • Github
  • Naver Blog
  • Instagram
hELLO · Designed By 정상우.
minzee

개발 기록장

코테 공부/Computer Algorithm

[2024 알고리즘 특강] 문자열/회문 (파이썬)

2024. 5. 16. 04:31

문제

회문이란 어떤 단어를 앞으로 읽던 거꾸로 읽던 같은 단어 혹은 문장을 말합니다. 예를 들어 civic, radar, level, rotor, refer 같은 단어는 회문입니다. 소문자 알파벳, 공백(“ “), 마침표(.)로 이루어진 문장에서 알파벳만 추출하였을 때 회문이면 회문 문장이 됩니다. “never odd or even.”과 같은 문장은 회문입니다. 소문자 알파벳, 공백(“ “), 마침표(.)로 이루어진 문장이 회문인지 아닌지를 return 하는 solution 함수를 작성하세요.

 

입력

sentence return
"never odd or even" true
"palindrome" false

 

예시 #1 알파벳과 숫자만 추출하여 소문자로 변환해보면 "neveroddoreven"이 되며 이 단어는 팰린드롬입니다.

예시 #2 문장의 맨 앞 문자인 "p"와 맨 뒤 문자인 "e"가 다르므로 팰린드롬이 아닙니다.

 

1차 시도 

# 1차 시도

import sys
input = sys.stdin.readline

n = input().lower().replace(" ", "")

# n[::-1] -> reverse된 문자열
if n == n[::-1]:
    print("true")
else:
    print("false")

계속 테스트해도 true여야하는 값이 false로 계속 뜨길래

print(n)

print(n[::-1]

출력 시켜봤는데 둘다 값이 똑같이 뜬다.

 

뭐가 문제인지 아무리 생각해봐도 모르겠어서 찾아보니 n에 strip()함수로 공백을 제거해야 된다고 한다.

근데 나는 이미 replace로 공백을 제거했는데,,?? 정말 모르겠어서 챗지피티의 도움을 받았다.

 

알고보니 sys.stdin.readline으로 입력 받으면 끝에 \n이 포함되기 때문에 이거를 없애기 위해 strip()을 사용해야 된다고 한다. 그래서 그렇다고 replace대신에 strip을 쓰는건 안된다. strip()은 양끝(lstrip()은 왼쪽, rstrip()은 오른쪽) 공백 없애지 중간에 있는 공백까지는 없애지 않는다. 그래서 최종 코드는 아래와 같다.

# 정답

import sys
input = sys.stdin.readline

n = input().lower().strip().replace(" ", "")

# n[::-1] -> reverse된 문자열
if n == n[::-1]:
    print("true")
else:
    print("false")

 

이 문제에서 [::-1] reverse된 문자열이라는 것을 처음 알았고,

lower()을 하는 이유는 파이썬에서 대소문자 구분을 하기 때문에 소문자 혹은 대문자 하나로 통일 시켜야 비교가 가능하기 때문이다.

저작자표시 (새창열림)

'코테 공부 > Computer Algorithm' 카테고리의 다른 글

[2024 알고리즘 특강] 공항 방문수 (파이썬)  (0) 2024.05.16
[2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)  (0) 2024.05.16
[이코테] 두 배열의 원소 교체 (파이썬)  (0) 2024.04.05
[이코테] 정렬 알고리즘 코드 정리 (파이썬)  (0) 2024.04.05
[이코테] 구현 - 상하좌우 (파이썬)  (0) 2024.03.28
    '코테 공부/Computer Algorithm' 카테고리의 다른 글
    • [2024 알고리즘 특강] 공항 방문수 (파이썬)
    • [2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)
    • [이코테] 두 배열의 원소 교체 (파이썬)
    • [이코테] 정렬 알고리즘 코드 정리 (파이썬)
    minzee
    minzee
    🇩🇮🇬🇮🇹🇦🇱 🇲🇪🇩🇮🇦 & 🇸🇴🇫🇹🇼🇦🇷🇪 🇨🇴🇳🇻🇪🇷🇬🇪🇳🇨🇪

    티스토리툴바