문제
https://www.acmicpc.net/problem/20436
코드
package com.company;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
private static class xy {
int x;
int y;
public xy(int x, int y) {
this.x = x;
this.y = y;
}
}
static Map<Character, xy> s = new HashMap<>();
static Map<Character, xy> v = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
xy L, R;
int time = 0;
Character c;
addMap();
L = s.get(input.charAt(0));
R = v.get(input.charAt(2));
input = br.readLine();
for (int i = 0; i < input.length(); i++) {
c = input.charAt(i);
if (s.containsKey(c)) {
xy dir_L = s.get(c);
time += Math.abs(L.x - dir_L.x) + Math.abs(L.y - dir_L.y) + 1;
L = dir_L;
} else if (v.containsKey(c)) {
xy dir_R = v.get(c);
time += Math.abs(R.x - dir_R.x) + Math.abs(R.y - dir_R.y) + 1;
R = dir_R;
}
}
System.out.println(time);
}
private static void addMap() {
s.put('q', new xy(1, 1));
s.put('w', new xy(1, 2));
s.put('e', new xy(1, 3));
s.put('r', new xy(1, 4));
s.put('t', new xy(1, 5));
s.put('a', new xy(2, 1));
s.put('s', new xy(2, 2));
s.put('d', new xy(2, 3));
s.put('f', new xy(2, 4));
s.put('g', new xy(2, 5));
s.put('z', new xy(3, 1));
s.put('x', new xy(3, 2));
s.put('c', new xy(3, 3));
s.put('v', new xy(3, 4));
v.put('y', new xy(1, 6));
v.put('u', new xy(1, 7));
v.put('i', new xy(1, 8));
v.put('o', new xy(1, 9));
v.put('p', new xy(1, 10));
v.put('h', new xy(2, 6));
v.put('j', new xy(2, 7));
v.put('k', new xy(2, 8));
v.put('l', new xy(2, 9));
v.put('b', new xy(3, 5));
v.put('n', new xy(3, 6));
v.put('m', new xy(3, 7));
}
}
풀이
이번 문제는 map을 이용하면 쉽게 풀리는 문제였다. map에는 키값으로 문자가 들어가고 value로는 해당 문자의 위치가 들어간다. 그리고 따로 위치에 맞게 L과 R이라는 변수를 만들어줘서 지금 왼손과 오른손의 위치가 어디에 존재하는지 저장해둔다. 그리고 누르는 시간 계산은 입력값으로 들어오는 문자가 왼손인지 오른손인지 파악하고 그에 따란 위치를 계산하고 해당 키를 입력하는 시간인 +1을 해준다.
'백준' 카테고리의 다른 글
백준 17413 단어 뒤집기2(JAVA) (0) | 2022.07.20 |
---|---|
백준 20291 파일 정리(JAVA) (0) | 2022.07.18 |
백준 10994 별찍기 - 19 (JAVA) (0) | 2022.07.14 |
백준 12933 오리 (JAVA) (0) | 2022.07.14 |
백준 1913 달팽이 (JAVA) (0) | 2022.07.11 |