코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.
- IT 직무로 취업을 희망하는 지원자들이 코딩테스트를 통과할 수 있는 알고리즘을 활용한 프로그래밍 교육이며, PCCP 자격증 취득이 목표인 프로그램
- 상세 설명 - 수원대학교(대학일자리 플러스센터)
앞서 공부한 해시을 사용해 팰린드롬 길이 문제를 풀어보겠다.
문자열이 주어지면 해당 문자열의 문자들을 가지고 만들 수 있는 최대길이 팰린드롬을 만들고 그 길이를 구하세요. 문자열은 소문자로만 이루어져 있습니다.
만약 "abcbbbccaaeee" 가 주어진다면 만들 수 있는 가장 긴 팰린드롬은 "ebbcaaacbbe"이고 답은 11입니다.
입력(s) | 출력(answer) |
---|---|
"abcbbbccaaeee" | 11 |
"aabbccddee" | 10 |
"fgfgabtetaaaetytceefcecekefefkccckbsgaafffg" | 41 |
"aabcefagcefbcabbcc" | 17 |
"abcbbbccaa" | 9 |
from collections import Counter
def solution(s):
sH = Counter(s)
odd = 0
for key in sH:
if sH[key] % 2 == 1:
odd += 1
return len(s) - odd + 1 if odd > 0 else len(s)
print(solution("abcbbbccaaeee"))
print(solution("aabbccddee"))
print(solution("fgfgabtetaaaetytceefcecekefefkccckbsgaafffg"))
print(solution("aabcefagcefbcabbcc"))
print(solution("abcbbbccaa"))
위키백과 - 회문
회문(回文) 또는 팰린드롬(palindrome)은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열(sequence of characters) 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다.
주어진 s
의 원소들을 가지고 팰린드롬의 최대길이를 만들어야 한다.
우선, 원소들 중 짝수의 빈도 수
를 가지는 원소들은 무조건 팰린드롬 길이에 포함된다.
이때 홀수의 처리는 가장 큰 홀수를 제외하고는 -1
를 한 후, 팰린드롬 길이에 포함할 수 있다.
따라서 식은 len(s) - 홀수들의 수 + 1
이다.
+1
을 하는 이유는 가장 큰 홀수는 -1
을 하지 않기 때문이다.
Counter
를 이용해 sH
에 s
의 문자 빈도 수를 센 Counter 객체
를 반환odd =+ 1
odd > 0
인 경우(홀수 존재) : 아까 세운 식을 이용해 return len(s) - odd + 1
odd = 0
인 경우(홀수 미존재) : return len(s)