문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17684
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
def solution(msg):
cnt = 1
arr = []
dict = {}
for i in range(65,91):
alpha = chr(i)
dict[alpha] = cnt
cnt += 1
idx = 0
tmp = ''
while idx < len(msg):
tmp += msg[idx]
if tmp in dict:
idx += 1
continue
else:
dict[tmp] = cnt
cnt += 1
s = tmp[:-1]
arr.append(dict[s])
tmp = ''
arr.append(dict[tmp])
return arr
풀이
- 처음 접근한 방법으로는, KAKAO가 입력되면 알파벳 한개는 딕셔너리에 존재하므로 for문으로 KA,KAK...을 탐색하려고 시도했었는데, 세번째 K에서 KA는 이미 있으니 KAO를 등록하고, 그 다음에 A를 건너 뛰고 O로 탐색을 해야해서 인덱스 위치를 직접 조정해야할 필요가 있었다. 다음부터는 입력 예시를 잘 읽어야겠다.
- 두번째로 접근한게 idx를 0으로 초기화하고 msg의 길이보다 작을때는 계속 while문을 돌리는 것이다.
- tmp에 문자를 하나씩 더해서, 딕셔너리에 있을 경우 다음 문자를 더하기 위해 idx를 +1 증가시켰다.
- 만약 tmp가 딕셔너리에 없는 문자열일 경우(ex.KAO) 딕셔너리에 해당 tmp를 cnt 값으로 추가하고 cnt는 +1
- 또한 출력할 문자는 KAO였을때, O를 제외한 KA는 존재했으므로 KA의 value를 출력하고 tmp는 초기화
- 이렇게 되면 idx는 A를 넘기고 O부터 탐색한다.
- 그리고 O는 이미 딕셔너리에 있으므로, idx가 증가해도 마지막 인덱스이므로 while문을 탈출한다.
- 그리고 남은 tmp(ex.O)의 value를 출력해주면 된다.
'👨🏻💻알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2. 피로도 (0) | 2023.01.24 |
---|---|
[프로그래머스] Lv3. 이중우선순위큐 (0) | 2023.01.24 |
[프로그래머스] Lv2. 더 맵게 (0) | 2023.01.23 |
[프로그래머스] Lv2. 연속 부분 수열의 합의 개수 (0) | 2023.01.23 |
[프로그래머스] Lv2. k진수에서 소수 개수 구하기 (0) | 2023.01.22 |