2023-01-02
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
<풀이>
완전 엉텅리로 푼문제
팰린드롬이 뭔지도 몰라서 찾아봄 ; 앞으로 읽으나 뒤로 읽으나 같은 문자열
답코드를 보고 한참을 생각
파이썬 Collections 라이브러리의 Counter함수를 상기시킬수 있는~
기본 구조 :
from collections import Counter
list = ['Hello', 'HI', 'How', 'When', 'Where', 'Hello']
print(Counter(list))
결과창
Counter({'Hello': 2, 'HI': 1, 'How': 1, 'When': 1, 'Where': 1})
이러면 key , value로 따로 계산가능한점 기억하자
<코드>
여러 코드가 있었지만 내 맘에 든 코드 한개를 가져옴
import collections
import sys
word = sys.stdin.readline().rstrip()
check_word = collections.Counter(word)
cnt = 0
result = ''
mid = ''
for k, v in list(check_word.items()):
if v % 2 == 1: #홀수라면
cnt += 1
mid = k #중간에 들어갈 값으로 저장
if cnt >= 2: #홀수가 2개이상이면 팰린드롬이 될 수 없다!!
print("I'm Sorry Hansoo")
exit()
for k, v in sorted(check_word.items()): #정렬을 통해 사전순으로 for문을 돌게함
result += (k * (v // 2)) #정확히 절반으로 나뉜 문자열을 만들어야 하므로 현재 갯수를 2로 나눠줌
print(result + mid + result[::-1]) # 앞+중간+뒤 를 더해 문자열 출력
코드를 작성할 때 고민했던 부분에서 많이 빗나감
팰린드롬의 조건을 생각해 보지 않았던것 같다.
1. 문자열에 홀수개로 사용된 알파벳이 2개이상일때 팰린드롬을 만들수 없다 print("I'm Sorrt~ " )
2. (정렬도 생각하지 않았음) sorted 사용됨
3. result부분도 이해어려움 -> k가 키값이니까 만약 A:4 인 for문을 돌고 있으면 k는 A를 2번 곱해줌 result는 AA
'백준 baekjoon' 카테고리의 다른 글
[백준 2309] 일곱난쟁이 (0) | 2023.04.11 |
---|---|
[백준 2231] 분해합 (0) | 2023.04.11 |
백준 [1543] 문서검색.py (0) | 2023.01.01 |
백준 [1919] 애너그램 만들기.py (0) | 2023.01.01 |
백준 [1032] 명령프롬프트.py (0) | 2022.12.26 |