본문 바로가기
코딩테스트/백준

[백준 5622] 다이얼 - Java

by naahy 2022. 10. 19.

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

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

 

 



알파벳과 매칭되는 숫자를 찾는 데에서 고민을 많이 했다.
아무리 생각해봐도 if문(혹은 switch-case문)으로 알파벳을 구별해 숫자를 매칭하는 방법밖에 떠오르지 않았다.


근데 진짜 그렇게 푸는 게 맞았다(...).
다른 규칙이 있는 줄 알고 끙끙댔는데, 최대한 단순하게 생각해볼 필요가 있었다.
아직 문제를 많이 안 풀어봐서 뭐가 맞는 방법인지 알기 어려우니 더 열심히 풀어봐야 할 듯...

 

 

✨ 참고

https://st-lab.tistory.com/67

 

[백준] 5622번 : 다이얼 - JAVA [자바]

https://www.acmicpc.net/problem/5622 5622번: 다이얼 문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이

st-lab.tistory.com


 

풀이1

  • 단어를 입력받은 후 for문을 통해 각 알파벳을 확인한다.
  • if문 혹은 switch-case문을 통해 알파벳별 숫자를 확인한다.
  • 숫자를 입력하는 데 걸리는 시간을 전체 시간 변수에 더한다.

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Dial5622 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String word = br.readLine();
		
		int time = 0;
		for (int i=0; i<word.length(); i++) {
			int alphabet = word.charAt(i);
			
			if (alphabet>='A' && alphabet<='C')
				time += 3;
			else if (alphabet>='D' && alphabet<='F')
				time += 4;
			else if (alphabet>='G' && alphabet<='I')
				time += 5;
			else if (alphabet>='J' && alphabet<='L')
				time += 6;
			else if (alphabet>='M' && alphabet<='O')
				time += 7;
			else if (alphabet>='P' && alphabet<='S')
				time += 8;
			else if (alphabet>='T' && alphabet<='V')
				time += 9;
			else if (alphabet>='W' && alphabet<='Z')
				time += 10;
		}
		
		System.out.println(time);
	}

}

 


 

풀이2

BufferedReader를 사용할 필요 없이 System.in.read()를 사용해 한 글자씩 읽어들이는 방법도 있다.

  • 루프를 돌며 System.in.read()로 한 글자씩 읽어들인다.
  • 해당 값의 크기를 확인하고 맞는 시간을 계산한다.

 

코드

import java.io.IOException;

public class Dial5622 {

	public static void main(String[] args) throws IOException {
		int time = 0;
		int alphabet;
		
		do {
			alphabet = System.in.read();
			
			switch (alphabet) {
			case 'A':	case 'B':	case 'C':
				time += 3;
				break;
				
			case 'D':	case 'E':	case 'F':
				time += 4; 
				break;
				
			case 'G':	case 'H':	case 'I':
				time += 5; 
				break;
				
			case 'J':	case 'K':	case 'L':
				time += 6; 
				break;
			case 'M':	case 'N':	case 'O':
				time += 7; 
				break;
                
			case 'P':	case 'Q':	case 'R':	case 'S':
				time += 8; 
				break;
                
			case 'T':	case 'U':	case 'V':
				time += 9; 
				break;
                
			case 'W':	case 'X':	case 'Y':	case 'Z':
				time += 10; 
				break;
			}
		} while (alphabet != '\n');
		
		System.out.println(time);
	}

}

백준은 정해진 입력만 들어오므로 do-while문을 사용해 작성했다.

댓글