다이얼 (5622) 풀이

2023. 6. 20. 14:36BaekJoon/문자열

문제내용

사용자에게 문자열을 입력받아 각 문자열에 속한 문자가 다이얼에 속하는 번호에 +1초를 해 모두 더한 값을 출력하는 문제이다.(+1초를 한 이유는 숫자 1이 걸리는 시간이 2초이기 때문이다.)


풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		try {
			String alpha = br.readLine();
			int result = 0;
			Map<Integer, String[]> map = new HashMap<Integer, String[]>();
			map.put(2, new String[] {"A","B","C"});
			map.put(3, new String[] {"D", "E", "F"});
			map.put(4, new String[] {"G","H","I"});
			map.put(5, new String[] {"J","K","L"});
			map.put(6, new String[] {"M","N","O"});
			map.put(7, new String[] {"P","Q","R","S"});
			map.put(8, new String[] {"T","U","V"});
			map.put(9, new String[] {"W","X","Y","Z"});
			for(int i = 0; i < alpha.length(); i++){
				char indexAlpha = alpha.charAt(i);
				result++;
				for(int key :map.keySet()){
					for(int j = 0; j < map.get(key).length; j++){
						if(map.get(key)[j].equals(String.valueOf(indexAlpha))){
							result += key;
						}
					}
				}
			}
			bw.write(String.valueOf(result));
			bw.write("\n");
			bw.flush();
			bw.close();
		} catch (IOException e) {
			System.exit(1);
		}
		
	}

}

조금 복잡하다고 생각할 수 있지만 차근차근 풀이해보겠다.

먼저 사용자에게 문자열을 입력받기 위해 BufferedReader를 사용해 alpha에 입력받았따.

총 걸리는 시간을 result변수에 담기 위해 선언 및 초기화를 하였따.

다이얼의 번호가 key,  다이얼의 알파벳을 value로 지정하기 위해 Map을 사용해 선언한 것이다. 키는 Integer형이고 value는 문자열 배열이고 바로 초기화를 한 것이다.

첫 번째 for문에서는 입력받은 문자열의 크기만큼 반복해 각 문자를 확인하여 indexAlpha에 저장했다.

문제에서 다이얼 1을 걸려면 2초가 걸린다고 하였으므로 각 번호를 찾기 이전 결과값 result에 1씩 증가 시켰다.

두번째 for문에서는 map의 모든 key를 볼 수 있는 keyset메소드를 사용해 key를 가지고 왔다.

세번째 for문에서는 map의 해당 key만큼 반복 횟수를 돌려 만약 문자와 같은 것이 있다면 결과값 result에 key를 더해줬다.

마지막으로 출력하기 위해 BufferedWriter를 사용해 결과값 result를 출력했다.


겪었던 문제

지나치게 for문이 많아 성능이 떨어지지 않을지 고민을 했던 것 같다. 방식의 차이는 있을 수 있지만 지금은 map을 이용했지만 문자열 자체만 이용하더라도 for문을 2번은 돌려야하기에 방식을 바꾸지 않았다.

'BaekJoon > 문자열' 카테고리의 다른 글

그대로 출력하기 (11718) 풀이  (0) 2023.06.22
상수 (2908) 풀이  (0) 2023.06.20
단어의 개수 (1152) 풀이  (0) 2023.06.20
문자열 반복 (2675) 풀이  (0) 2023.06.16
알파벳 찾기 (10809) 풀이  (0) 2023.06.16