keymap                                 targets               result

["ABACD", "BCEFD"]      ["ABCD","AABB"]     [9, 4]

 

하나의 키를 계속 누르면 알파벳이 달라지는 맵핑을 이용해 targets을 치는데 걸리는 숫자를 출력한다. targets이 keymap에 없다면 -1을 출력한다. 

난 dict의 에러를 try: except:를 이용해 처리했는데

def solution(keymap, targets):
    answer = []
    keydic = {}
    for lst in keymap:
        for i, ch in enumerate(lst):
            try:
                v = keydic[ch]
                if keydic[ch] > i+1:
                    keydic[ch] = i+1
            except:
                keydic[ch] = i+1
                continue
    for lst in targets:
        sum = 0
        for ch in lst:
            try:
                sum += keydic[ch]
            except:
                sum = -1
                break
        answer.append(sum)
    return answer

a=["AA"]
b=["B"]
solution(a,b)

실행1 if ch in dict else 실행2로 깔끔하게 하신분이 있었다. min()을 이용해 한줄에 작성 

def solution(keymap, targets):
    answer = []
    hs = {}
    for k in keymap:
        for i, ch in enumerate(k):
            hs[ch] = min(i + 1, hs[ch]) if ch in hs else i + 1

    for i, t in enumerate(targets):
        ret = 0
        for ch in t:
            if ch not in hs:
                ret = - 1
                break
            ret += hs[ch]
        answer.append(ret)

    return answer

+ Recent posts