def solution(keymap, targets):
d = dict()
result = []
for i in keymap:
for target in i:
if target in d: # 값이 이미 있을 때
d[target] = min(i.index(target) + 1, d[target])
else: # 값을 처음 넣는 경우
d[target] = i.index(target) + 1
for i in targets:
sum = 0
for target in i:
if target not in d:
sum = -1
break
else:
sum += d[target]
result.append(sum)
return result
풀이) keymap에 있는 문자들의 순서를 딕셔너리로 만들었는데 이때, 가장 먼저 나오는 문자가 좋은 문자이므로 index()를 활용하였다. targets에 있는 문자가 keymap에 있다면 딕셔너리에서 value를 반환하였다.
고난) solution(["BC"],["CAC","BC"]) 이렇게 넣었을 때 문제였다. CAC를 보면 C는 들어있으니까 2번 누르면 되니까 sum은 2가 된다. 근데 A는 없으니까 CAC에 대해서 통째로 -1이 되어야했다. 근데 처음에 나는 sum = -1이 아니라 result.append(-1)이라고 했었다. 그런데 값이 자꾸 [-1, 2, 3] 이렇게 출력되는 게 문제였는데 왜냐하면 if문에서 -1을 넣고, 내려와서 result.append(sum)으로 다시 한번 더 넣기 때문이다. 이때 넣어지는 값은 CAC의 첫번째 C값이었다. 그래서 -1을 넣고, 처음에 2번 눌렀으니까 2가 들어갔던 것이다.
참고) break는 가장 가까운 loop를 빠져나온다. 따라서 위 코드에서 break를 하면 2번째 for문 전체를 빠져나오게 되므로, break 이후 실행되는 코드는 result.append(sum)이다.
반응형
'알고리즘 > 코테 스터디 (2024)' 카테고리의 다른 글
Programmers 다리를 지나는 트럭 (0) | 2024.07.10 |
---|---|
백준 1158 (2) | 2024.07.09 |
코테 삽질일지 (1) (0) | 2024.07.09 |
백준 10828 (0) | 2024.07.08 |
문제풀이 & 오답노트 양식 (0) | 2024.03.04 |