[BOJ] 5622 다이얼 (JAVA)

joyful·2021년 4월 10일
0

Algorithm

목록 보기
48/65
post-custom-banner

✅ 문제

상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.

전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

✅ 입력

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

✅ 출력

첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

✅ 예제 1

▼ 입력

UNUCIC

▼ 출력

36

풀이

  1. 숫자에 해당하는 문자를 저장해놓는 문자열 배열(phone)을 생성하고, 해당하는 문자들로 초기화 한다.
  2. 입력받은 번호를 문자열로 저장(number)하고, 반복문을 실행하며 번호의 숫자를 하나씩 추출한 뒤 String 타입의 변수(num)에 임시 저장해놓는다.
  3. 반복문 내에 또 다른 반복문(이중루프)을 실행하여 추출한 숫자와 (num)와 일치하는 다이얼의 숫자에 해당하는 문자(phone)를 판별한다. 일치한다면 시간을 증가시키는데, 1은 2초가 걸리므로 2+다이얼의 인덱스 하여 증가시키도록 한다.

💻 코드

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		// 숫자에 해당하는 문자 저장해놓는 배열
		// 다이얼의 숫자 순서 → 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
		String[] phone = {"", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ", ""};

		int time = 0;	// 걸리는 시간 저장
		
		Scanner scanner = new Scanner(System.in);
		String number = scanner.nextLine();	// 입력받은 번호 저장
		scanner.close();
		
		for(int i=0; i<number.length(); i++) {
			String num = String.valueOf(number.charAt(i));	// 번호의 숫자 추출
			for(int j=0; j<phone.length; j++) {	// 문자 검사
				if(phone[j].contains(num))	{// 추출한 숫자와 phone의 문자가 같을 경우
					time += (2+j);	// 숫자의 위치만큼 시간 증가
				}
			}
		}
		
		System.out.println(time);
	}
}
profile
기쁘게 코딩하고 싶은 백엔드 개발자
post-custom-banner

0개의 댓글