본문 바로가기
  • 시 쓰는 개발자
알고리즘/코테 스터디 (2024)

대충 만든 자판

by poetDeveloper 2024. 5. 19.
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)이다.

네모박스 친 곳을 빠져나오게 되는 것이다.