코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.
- IT 직무로 취업을 희망하는 지원자들이 코딩테스트를 통과할 수 있는 알고리즘을 활용한 프로그래밍 교육이며, PCCP 자격증 취득이 목표인 프로그램
- 상세 설명 - 수원대학교(대학일자리 플러스센터)
앞서 공부한 해시와 스택을 사용해 외톨이 알파벳 문제를 풀어보겠다.
알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳
이라고 정의합니다.
문자열 "edeaaabbccd"를 예시로 들어보면,
외톨이 알파벳
이 아닙니다."ede(aaa)bbccd"
"e(d)eaaabbcc(d)"
문자열 "eeddee"를 예시로 들어보면,
"(ee)dd(ee)"
"ee(dd)ee"
문자열 input_string이 주어졌을 때, 외톨이 알파벳들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요. 만약, 외톨이 알파벳이 없다면 문자열 "N"을 return 합니다.
input_string | result |
---|---|
"edeaaabbccd" | "de" |
"eeddee" | "e" |
"string" | "N" |
"zbzbz" | "bz" |
외톨이 알파벳
인 e, d를 알파벳순으로 이어 붙여 문자열을 만들면 "de"가 됩니다.외톨이 알파벳
이 없습니다.외톨이 알파벳
인 z, b를 알파벳순으로 이어 붙여 문자열을 만들면 "bz"가 됩니다.from collections import defaultdict
def solution(input_string):
sH = defaultdict(int)
answer = []
stack = []
for x in input_string:
if not stack:
stack.append(x)
sH[x] += 1
else:
if stack[-1] != x:
stack.clear()
stack.append(x)
sH[x] += 1
else:
stack.append(x)
for key in sH:
if sH[key] > 1:
answer.append(key)
if answer:
return ''.join(sorted(answer))
else:
return "N"
defaultdict(int)
를 이용해 모든 key
값을 0
으로 초기화해 sH에 저장stack
이 비어있다면, stack
에 x
삽입하고 sH[x] += 1
stack
이 비어있지 않고 마지막으로 삽입된 값이 x
와 같지 않다면, stack
을 비우고 stack
에 x
삽입하고 sH[x] += 1
stack
이 비어있지 않고 마지막으로 삽입된 값이 x
와 같다면 stack
에 x
삽입for
문이 종료된 후 sH[key] > 1
라면, 외톨이 알파벳이므로 answer
에 key
삽입answer
에 모두 삽입하고, sorted
를 통해 정렬한 후 join
을 이용해 return
return "N"
즉, 이 문제는 붙어있거나 1
개만 존재한다면 sH[key]
의 value
는 1
이 되고, 외톨이 알파벳이라면 value
는 1
보다 크도록 설정되어 있다.