소스 코드

T = int(input())

# 핸드폰 키패드
keyboard = [0,
            0,
            ['a','b','c'],
            ['d','e','f'],
            ['g','h','i'],
            ['j','k','l'],
            ['m','n','o'],
            ['p','q','r','s'],
            ['t','u','v'],
            ['w','x','y','z']]

for tc in range(1,1+T):

    # 키 입력, 단어의 개수
    s, n = map(int,input().split())

    # 단어
    word = list(map(str,input().split()))

    # 키 입력에 대응되는 사전 안의 단어 수
    cnt = 0

    # 키 입력(int) => 리스트 형태
    s_lst = list(str(s))

    # 키 입력의 길이
    s_len = len(s_lst)

    for q in range(n):

        # 키 입력에 맞는 단어가 몇 개인가
        temp = 0

        if len(word[q]) == s_len:
            for w in range(s_len):
                if word[q][w] in keyboard[int(s_lst[w])]:
                    temp += 1

                else:
                    break

        if temp == s_len:
            cnt += 1

    print('#{} {}'.format(tc,cnt))

 


해결 방법

1. 키 입력에 사용된 숫자를 순서대로 사전 안의 글자들과 확인하면 됨

ex) 키 입력이 232이고, 사전 안에 abc, adb가 있는 경우

2('a','b','c' 중 하나)와 a > 3('d','e','f')과 b > 2와 c를 비교 => a는 2 안에 포함, b는 3 안에 포함 X, c는 2 안에 포함 => abc는 만들 수 없는 단어

adb의 경우 a는 2 안에, d는 3 안에, b는 2 안에 포함 => adb는 만들 수 있는 단어


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.