-
[c++][시뮬레이션] 백준 20436번: ZOAC 3알고리즘 2022. 1. 4. 20:30
문제 풀이
1. 키보드 위치를 저장해둔다.
2. 오른손과 왼손의 시작 위치를 저장한다.
3. 입력받은 문자에 따라 손의 이동거리를 계산한다.
코드
#include <iostream> #include <stdlib.h> using namespace std; int main() { // 왼손의 키보드 char s_l[] = { 'q','w','e','r','t', 'a','s','d','f','g', 'z','x','c','v' }; int s_l_p[][2] = { {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, {1,0}, {1,1}, {1,2}, {1,3}, {1,4}, {2,0}, {2,1}, {2,2}, {2,3} }; // 오른손의 키보드 char s_r[] = { 'y','u','i','o','p', 'h','j','k','l', 'b','n','m', }; int s_r_p[][2] = { {0,1}, {0,2}, {0,3}, {0,4}, {0,5}, {1,1}, {1,2}, {1,3}, {1,4}, {2,0}, {2,1}, {2,2} }; char l, r; string str; int l_postion[2] = { 0 }; int r_postion[2] = { 0 }; cin >> l >> r; cin >> str; // 오른손과 왼손의 시작 위치 저장 for (int i = 0; i < 14; i++) { if (l == s_l[i]) { l_postion[0] = s_l_p[i][0]; l_postion[1] = s_l_p[i][1]; } if (i < 12) { if (r == s_r[i]) { r_postion[0] = s_r_p[i][0]; r_postion[1] = s_r_p[i][1]; } } } int time = 0; // 입력받은 문자열에 따라 이동하는 시간과 누르는 시간을 저장 for (int i = 0; i < str.length(); i++) { for (int j = 0; j < 14; j++) { if (str[i] == s_l[j]) { time += abs(l_postion[0] - s_l_p[j][0]) + abs(l_postion[1] - s_l_p[j][1]) + 1; l_postion[0] = s_l_p[j][0]; l_postion[1] = s_l_p[j][1]; } if (j < 12) { if (str[i] == s_r[j]) { time += abs(r_postion[0] - s_r_p[j][0]) + abs(r_postion[1] - s_r_p[j][1]) + 1; r_postion[0] = s_r_p[j][0]; r_postion[1] = s_r_p[j][1]; } } } } cout << time << "\n"; return 0; }
'알고리즘' 카테고리의 다른 글
[c++][완전탐색][브루트 포스] 백준 2798번: 블랙잭 (0) 2022.01.14 [c++][그래프] 백준 1260번: DFS와 BFS (0) 2022.01.13 [c++][구현] 백준 5597번: 과제 안 내신 분..? (0) 2022.01.11 [c++][자료구조][큐] 백준 2164번: 카드2 (0) 2022.01.10 [c++][구현] 백준 20053번: 최소, 최대 2 (0) 2022.01.05