링크 : https://www.acmicpc.net/problem/20436
20436번: ZOAC 3
첫 번째 줄에는 두 알파벳 소문자 sL, sR이 주어진다. sL, sR은 각각 왼손 검지손가락, 오른손 검지손가락의 처음 위치이다. 그 다음 줄에는 알파벳 소문자로 구성된 문자열이 주어진다. 문자열의
www.acmicpc.net
- 문제
- 소요시간: 15분 20초(오류 검수에 시간이 좀 걸렸다)


- 설계하기(접근방법)
1. 왼쪽 시작, 오른쪽 시작 자판을 입력받고, 문자열을 입력받는다
2. 구현
좌측 자판을 딕셔너리로 구현
left_list = {'q': (1, 3), 'w': (2, 3), 'e': (3, 3), 'r': (4, 3), 't': (5, 3),
'a': (1, 2), 's': (2, 2), 'd': (3, 2), 'f': (4, 2), 'g': (5, 2),
'z': (1, 1), 'x': (2, 1), 'c': (3, 1), 'v': (4, 1), }
우측 자판을 딕셔너리로 구현
right_list = {'y': (1, 3), 'u': (2, 3), 'i': (3, 3), 'o': (4, 3), 'p': (5, 3),
'h': (1, 2), 'j': (2, 2), 'k': (3, 2), 'l': (4, 2),
'b': (0, 1), 'n': (1, 1), 'm': (2, 1)}
sec = 0 선언
문자열을 순회하며 알파벳이 좌측자판에 있는 경우, 우측 자판에 있는 경우로 나눈다
두 경우 공통사항으로
sec에
|이전 알바벳의 x좌표 - 현재 알파벳의 x좌표| (절대값)
|이전 알바벳의 y좌표 - 현재 알파벳의 y좌표| (절대값) 를 각각 더한 후
자판 입력시간 1초를 더 더해준다.
3. sec을 출력한다.
- 코드(출력)
left_list = {'q': (1, 3), 'w': (2, 3), 'e': (3, 3), 'r': (4, 3), 't': (5, 3),
'a': (1, 2), 's': (2, 2), 'd': (3, 2), 'f': (4, 2), 'g': (5, 2),
'z': (1, 1), 'x': (2, 1), 'c': (3, 1), 'v': (4, 1), }
right_list = {'y': (1, 3), 'u': (2, 3), 'i': (3, 3), 'o': (4, 3), 'p': (5, 3),
'h': (1, 2), 'j': (2, 2), 'k': (3, 2), 'l': (4, 2),
'b': (0, 1), 'n': (1, 1), 'm': (2, 1)}
sec = 0
l_start, r_start = input().split()
char = input()
for i in char:
if i in left_list:
sec += abs(left_list[l_start][0] - left_list[i][0])
sec += abs(left_list[l_start][1] - left_list[i][1])
l_start = i
sec += 1
if i in right_list:
sec += abs(right_list[r_start][0] - right_list[i][0])
sec += abs(right_list[r_start][1] - right_list[i][1])
r_start = i
sec += 1
print(sec)
- 얻어갈 부분
1. 알파벳 딕셔너리를 구현할 때, 좌표의 값을 하나 잘못입력해서 오류를 잡는데 많은 시간이 소요되었다.
'알고리즘(백준) > 구현' 카테고리의 다른 글
| [알고리즘/구현] 12933번 : 오리 - python (0) | 2023.04.16 |
|---|---|
| [알고리즘/구현] 1913번 : 달팽이 - python (0) | 2023.04.16 |
| [알고리즘/구현] 1244번 : 스위치 켜고 끄기 - python (0) | 2023.03.21 |
| [알고리즘/구현] 4396번 : 지뢰 찾기 - python (0) | 2023.03.20 |
| [알고리즘/구현] 2578번 : 빙고 - python (0) | 2023.02.28 |