[학습 내용]
문자열에 대해서 어느 정도 알고 있다고 생각했었는데, 풀다 보니 기초적인 부분에서도 실수가 많이 나와 반성하게 됐다. 오늘 풀었던 문제들도 도움이 됐지만 자주 나올 패턴은 회문 관련되서 나올 것 같다. 그 문제 위주로 확인해보자.
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
팰린드롬은 회문, 즉 문장의 가운데를 중심으로 데칼코마니가 되는 문장을 말한다. 예를 들어 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 취업 리부트 코스를 수강하고 작성한 콘텐츠입니다.
IT 커리어 성장 코스 항해99, 개발자 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr
'항해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 |