Algorithm/[BOJ]

[Java] 백준 5622번 : 다이얼

정보통신 고심이 2024. 3. 21. 11:39

https://www.acmicpc.net/problem/5622

 

접근 방법

1. 문자열 입력 받기

2. 입력 받은 문자열을 한글자씩 분리 (split. charAt)

3. 

 

정답 코드

import java.io.*;
// import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String input = br.readLine();
     
        int count =0;
        
        for(int i=0; i<input.length(); i++) {
        	switch(input.charAt(i)) {
	        	case 'A': case 'B': case 'C':
	        		count += 3;
	        		break;
	        	case 'D': case 'E': case 'F':
	        		count += 4;
	        		break;
	        	case 'G': case 'H': case 'I':
	        		count += 5;
	        		break;
	        	case 'J': case 'K': case 'L':
	        		count += 6;
	        		break;
	        	case 'M': case 'N': case 'O':
	        		count += 7;
	        		break;
	        	case 'P': case 'Q': case 'R': case 'S':
	        		count +=8;
	        		break;
	        	case 'T': case 'U': case 'V':
	        		count += 9;
	        		break;
	        	case 'W': case 'X': case 'Y': case 'Z':
	        		count += 10;
	        		break;
        	}
        }
        
       bw.write(String.valueOf(count));
       br.close();
       bw.flush();
       bw.close();
       }
    
}

 

 

오답 코드

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String input = br.readLine();
        String[] chars = input.split(""); // 한글자씩 분리
        
        for(int i=0; i<chars.length; i++) {
        	switch(chars[i]) {
	        	case A, B, C:
	        		bw.write(3);
	        		break;
	        	case D, E, F:
	        		bw.write(4);
	        		break;
	        	case G, H, I:
	        		bw.write(5);
	        		break;
	        	case J, K, L:
	        		bw.write(6);
	        		break;
	        	case M, N, O:
	        		bw.write(7);
	        		break;
	        	case P, Q, R, S:
	        		bw.write(8);
	        		break;
	        	case W, X, Y, Z:
	        		bw.write(9);
	        		break;
        	}
        	
        }
        

       br.close();
       bw.flush();
       bw.close();
       }
    
}

 

틀린 이유 1 : case문 문법

case A, B, C : (X)

case A : case B : case C: (O)

 

틀린 이유 2 : 값을 누적하지 않았음

bw.write(8) 이렇게 바로 출력하는게 아니라

다음 문자 값까지 누적 된 합을 구해야 하기 때문에 += 연산 필요

 

case가 많아서 설마 case문으로 다 하겠어? 이런 생각이 들었는데 진짜 case문을 사용했다

한번 접근 방법이 떠오르면 끝까지 해보자