본문 바로가기
알고리즘/백준 알고리즘

[Baekjoon] 백준 알고리즘: 5622 - 파이썬

by 며루치꽃 2021. 1. 5.

1. 문제

www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

2. 내가 생각했던 풀이과정

첫번째 풀이과정

1) 단어를 한 단어씩 자른다

2) 그 단어가 어떤 숫자인지 판단

3) 숫자에 따른 시간 계산

 

여기서 제일 고민했던 부분이 바로 2번에서 그 단어가 어떤 숫자인지 판단할 때, 자른 단어를 어떻게 처리하느냐 하는 문제였다. 처음 생각했던 부분은 딕셔너리를 이용하여 

{ 1: 'a', 'b', 'c' }

이렇게 해결할 수 있나 고민해보았다. 하지만, 자른 단어를 숫자로 변환하는 과정이 아스키코드로 변환하기에는 매우 불편하다는 것을 깨닫고 이 풀이는 접게 되었다.

 

두번째 풀이과정

1) 단어를 한 단어씩 자른다

2) 각 숫자에 해당하는 문자를 배열로 저장한다

3) 자른 단어만큼 반복문을 돌면서, dial 길이 만큼 확인하면서, 자른 단어가 dial 안에 있는지 없는지를 확인합니다

4) 만약 dial 안에 있다면, 다이얼의 index에 초기값 + 3을 더해줍니다

5) 더해준 결과를 출력해줍니다.

3. 나의 풀이

word = input()
def diolog(word):
    result = 0
    dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'];

    for i in range(len(word)):
        for j in dial:
            if word[i] in j:
                result += dial.index(j)+3
    print(result)

diolog(word)

4. 다른 사람의 풀이

alpabet_list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
word = input()

time = 0
for unit in alpabet_list :  
    for i in unit:  
        for x in word :  
            if i == x : 
                time += alpabet_list.index(unit) +3  # time = time + index +3
print(time)

for문 안에 하위 for문을 작성해서 알파벳 리스트 원소를 각각의 알파벳으로 분리하여 변수 i에 선언하고 입력받은 문자열을 분리하여 변수 x에 선언하신 부분은 나랑 비슷하였지만 밑에 if 부분이 달랐던 부분이 존재하였다.

이 분은 분리된 알파벳을 비교해서 해당 알파벳의 시간을 구하는 코드를 짜셨는데 이 풀이도 직관적이여서 다시 생각할때 고려해봐야겠다. 

 

5. 새로 알게된 점

in 연산자에 대해 정리할 필요가 있어 in 연산자를 정리해 보았다. in연산자는 어떤 배열이 있을 때 그 배열에 특정한 값이 있는가를 찾아서 그 값이 있으면 True(참)를, 없으면 False(거짓)를 반환하는 boolean 연산자다.

'a' in 'abc' # True
'a' in 'book' # False
a = [1, 2.0, "3"]
print(1 in a) # True
print(2 in a) # True
print(3 in a) # False

위와 같은 결과가 나온 이유는 자료형이 달라서입니다. 3같은 경우 정수형으로 in 연산자를 실행하였는데 배열안에 있는 3은 문자열이기 때문에 False가 출력이 되게 됩니다. 

댓글