https://www.acmicpc.net/problem/5622
내가 작성한 코드
1
2
3
4
5
6
7
8
9
|
dial = [['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']]
string = input()
time = 0
for s in string:
for i, d in enumerate(dial):
if s in d:
time += i + 3
break
print(time)
|
cs |
같은 다이얼을 가지는 문자들을 list로 묶어서 dial이라는 list에 다시 넣어주었다.
입력받은 문자에 대해 하나씩 하위 리스트에 속하는지 확인하고, enumerate로 받은 index값 + 3을 총 시간에 더해주었다.
코드가 잘 작동하긴 하지만 더 보기쉽게 작성할 수 있다.
1
2
3
4
5
6
7
8
9
|
dial=['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
ex=input()
n=0
for j in ex:
for i in dial:
if(i.find(j)>=0):
n+=dial.index(i)+3
break
print(n)
|
cs |
갇은 다이얼을 가지는 문자를 list로 묶을 필요가 없다. 'ABC'와 같이 문자열로 만들어도 찾을 수 있다.
string.find(찾을문자, 찾기시작할위치)
문자열 중에서 특정 문자를 찾고, 위치를 반환해준다.
찾는 값이 없으면 -1을 반환한다.
(문자열만 가능)
list.index(찾을값)
list에서 찾고자 하는 값과 정확히 일치하는 첫번째 값의 index를 반환한다.
찾는 값이 없으면 ValueError 가 발생한다.
(문자열, 리스트, 튜플에 사용가능)
위 코드에서 i.find(j) >= 0 이라는 i에 j가 있는 경우를 말한다.
있으면 dial에서 i가 몇 번째 인덱스인지 찾아서 index+3을 전체 시간인 n에 더해준다.
이런 방법도 가능하다.
1
2
3
4
5
|
UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
NUMBER = '22233344455566677778889999'
numList = []
[numList.append(int(NUMBER[UPPER.index(i)])+1) for i in input()]
print(sum(numList))
|
cs |
코드의 진행순서
1. input()으로 문자열을 입력받는다.
2. for문으로 문자열의 문자를 하나씩 꺼내 사용한다.
numList.append(int(NUMBER[UPPER.index(i)])+1)
2-1 UPPER에서 몇 번째 문자인지 확인해 NUMBER에서 해당 인덱스의 숫자를 찾는다
2-2 해당 숫자 + 1(다이얼값)을 numList에 추가한다.
3. numList의 모든 요소의 값을 더한 값을 화면에 출력한다.
4번째 줄에서 [] 안에 for문을 넣는 것이 어떤 의미인지 잘 몰랐는데 검색해보니 종종 사용했던 list를 생성하는 방법이랑 같은거였다.
1
|
list = [0 for _ in range(10)]
|
cs |
0이 10개 있는 list를 만들기 위해 [] 안에 for문을 사용해서 list를 정의해줬다.
이번 문제에서는 list에 저장하지 않고 numList.append() 를 실행했으므로 다른 변수에 저장하지 않는다.
1
2
3
4
5
6
|
# [numList.append(int(NUMBER[UPPER.index(i)])+1) for i in input()]
for i in input():
index = UPPER.index(i)
dial = int(NUMBER[index]) + 1
numList.append(dial)
|
cs |
주석처리한 위의 코드를 풀어서 쓰면 아래의 for문과 같다.
이런식으로 list 안에 for문을 정의하는 방법을 리스트 컴프리헨션(List Comprehension)이라고 한다고 한다.
NUMBER에서 찾은 값에 +1을 더하는 이유는 WXYZ는 dial값이 10인데 3부터 10으로 문자열을 만들면 index를 통해 값을 찾을 수 없기 때문이다. (WXYZ -> 1010 에 대응된다) 그래서 1을 뺀 2부터 9로 문자열을 구성한 후, 마지막에 1을 더해준다.
참고한 페이지
https://ooyoung.tistory.com/78
https://redmuffler.tistory.com/452
'알고리즘' 카테고리의 다른 글
백준 - 1316번 (0) | 2021.08.03 |
---|---|
백준 - 2941번 / replace() (0) | 2021.08.02 |
백준 - 2908번 / python slicing (0) | 2021.08.02 |
백준 - 10809번 / 아스키코드, enumerate() (0) | 2021.07.28 |
백준 - 함수 (0) | 2021.07.27 |