[학습 내용]
문자열에 대해서 어느 정도 알고 있다고 생각했었는데, 풀다 보니 기초적인 부분에서도 실수가 많이 나와 반성하게 됐다. 오늘 풀었던 문제들도 도움이 됐지만 자주 나올 패턴은 회문 관련되서 나올 것 같다. 그 문제 위주로 확인해보자.
팰린드롬은 회문, 즉 문장의 가운데를 중심으로 데칼코마니가 되는 문장을 말한다. 예를 들어 ABBA나 ABCBA 같은 경우가 이에 해당한다. 어떤 단어가 팰린드롬인지 아닌지 확인하기 위해서는 단어의 길이만큼 돌면서 양 끝의 값이 같지 않은 지점이 있는지 확인하는 것이다.
- 문자열 S가 팰린드롬인지 확인하는 방법은 S[i] == S[len(S) - i - 1] (양 끝부터 대칭이 되는 지점)이 같은지 확인
- 만약 같지 않다면 회문이 아님.
위와 같은 개념을 이해하고 팰린드롬의 문제를 풀려고 했지만 쉽지 않았다. 가장 헤맸던 부분은 어떤 방식으로 문자열을 회문 형태로 표현해야 할지였다. 그 부분에서 갈피를 제대로 잡지 못해 이리저리 헤매다가 회문을 어떤 방식으로 표현하는지에 대한 설명을 보고 나니 코드로 구현할 수 있었다.
- 핵심은 문장 + 길이가 홀수이면 남는 하나의 문자 + 문장의 역순 이다.
나는 회문을 표현할 때 처음, 끝 순서대로 문자를 반복문으로 하나씩 반복해나가는 방식을 생각하다보니 해결책이 나오지 않았다. 앞으로 문제를 풀 때는 조금은 큰 단위로 푸는 방식도 생각해보는 것이 좋을 듯 하다.
더보기
from collections import Counter
from sys import stdin
input = stdin.readline
def palindrome(name):
word_counter = Counter(sorted(list(name)))
center = ''
half_sentence = ''
odd_count = 0
for char, count in word_counter.items():
if count % 2 != 0:
center = char
odd_count += 1
if odd_count > 1:
return "I'm Sorry Hansoo"
half_sentence += char * (count // 2)
return half_sentence + center + half_sentence[::-1]
name = input().rstrip()
print(palindrome(name))
항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠입니다.
'항해99 > 2-4주차' 카테고리의 다른 글
[항해99 취업 리부트 코스 학습일지] Day 12 - 1차 코딩테스트 (0) | 2024.04.02 |
---|---|
[항해99 취업 리부트 코스 학습일지] Day 11 - 알고리즘 : 2차원 배열 (0) | 2024.04.01 |
[항해99 취업 리부트 코스 학습일지] Day 9 - 알고리즘 : 백트래킹 (1) | 2024.03.29 |
[항해99 취업 리부트 코스 학습일지] Day8 - 알고리즘 : 자료형 (0) | 2024.03.28 |
[항해99 취업 리부트 코스 학습일지] Day7 - 알고리즘 시작 (0) | 2024.03.27 |