Algorithm/백준

백준 5622번 다이얼

코딩쪼앙 2022. 4. 16. 21:16

문제

첫 번째 해결방법

A를 0 Z를 25로 보고 각 다이얼(2부터 9까지)에

들어가는 알파벳의 최댓값을 넣어준다.

그 후 7이거나 9일 때는 알파벳이 네 개 들어있으므로,

알파벳의 값이 3 더 작을 때

다이얼의 값보다 1더 큰수를 answer에 더해주고,

나머지의 경우에는 2 더 작을 때 더해주어 출력한다.

data = list(input())
num = 2
alpha = []
answer = 0
for i in range(0, 16, 2):
    result = num + i
    num += 1
    if num < 8:
        alpha.append((result, num - 1))
    elif num < 10:
        alpha.append((result + 1, num - 1))
    else:
        alpha.append((result + 2, num - 1))

for ans in data:
    alpha_num = ord(ans) - ord('A')
    for x,y in alpha:
        if y == 7 or 9:
            if x - 3 <= alpha_num <= x:
                answer += y + 1
                break
        else:
            if x - 2 <= alpha_num <= x:
                answer += y + 1

print(answer)
abc  012   		다이얼 번호와 최댓값의 차이 : 0 (2 - 2) 다이얼 : 2
def  345     		다이얼 번호와 최댓값의 차이 : 2 (5 - 3) 다이얼 : 3
ghi  678      		다이얼 번호와 최댓값의 차이 : 4 (8 - 4) 다이얼 : 4
jkl   9,10,11   	다이얼 번호와 최댓값의 차이 : 6 (11 - 5) 다이얼 : 5
mno  12,13,14   	다이얼 번호와 최댓값의 차이 : 8 (14 - 6) 다이얼 : 6

다이얼 번호가 1씩 커질 때마다

다이얼 번호와 최댓값의 차이는

2씩 늘어나는 규칙이 보인다. 

따라서 result 변수를 만들어

다이얼 번호가 1씩 늘어날 때 마다

2씩 더해서 최댓값을 넣어

배열에 다이얼 번호와 같이 넣어주었다.

7일 때는 다이얼에 문자가 4개 있으므로,

최댓값을 더할 때 2를 더해주는 것이 아닌

3을 더해주어 넣어야 하므로, 1을 더 더해서 넣어주었고,

8일 때도 위와 같이 연산을 해서 다음 세 문자를 넣어주었다.

그 후 9일 때는 마지막 문자까지 더해주어야 하므로

총 2를 더해서 배열에 넣어준 후,

다이얼의 번호가 7이거나 9일 때는 최댓값보다 3 더 작은 경우까지

그 다이얼에 속한 것이므로 answer에 더해주었고, 그 이외의 경우에는

문자가 3개씩 들어있으므로 2 더 작은 경우까지

그 다이얼에 속한 것으로 처리하여 answer에 더해서 출력해주었다.

더 간단하게 풀 수 있는 방법이 있을 것 같아

다른분들의 풀이도 찾아보았다.

 

두 번째 해결방법

배열에 문자들을 하나씩 넣어 알파벳을 입력받은 후

알파벳 길이만큼 for문을 돌리고

다이얼에 들어있는 문자들도 for문을 돌면서 탐색한 후,

입력값과 일치하는 알파벳을 찾으면 

다이얼의 인덱스값 + 3을 해서(ABC 다이얼을 돌릴 때

걸리는 시간은 3초부터 시작해서 1초씩 늘어가므로)

answer변수에 하나씩 더한 후 출력한다.

dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
alpha = input()
answer = 0
for i in range(len(alpha)):
    for j in dial:
        if alpha[i] in j:
            answer += dial.index(j) + 3

print(answer)

문제를 너무 복잡하게 생각하고 푼 것 같아서 다른 분들의 코드를 보고 머쓱해졌다^^;;