개발자 미니민의 개발스터디

[백준 JAVA] 5622번 풀이 - 🔥해결 !!!🔥

by mini_min

package baekjoon;

import java.io.IOException;
import java.util.Scanner;
 
/**
 * 다이얼
 * 오래된 다이얼 전화기가 있다.
 * 숫자를 누르고 돌려야한다. 
 * 숫자를 누른 뒤에는 다시 처음으로 돌아가며, 숫자 1을 걸려면 총 2초가 필요하다. 
 * 한 칸 옆에 있는 숫자를 걸기 위해서는 1초씩 더 걸린다.
 * 할머니는 전화번호를 각 숫자에 해당하는 문자로 외운다.
 * 할머니가 외운 단어가 주어졌을 때, 전화를 걸기 위해 필요한 최소 시간을 구하시오.
 */
public class _5622 {
	
	public static void main(String args[]) throws IOException{
		
		Scanner sc = new Scanner(System.in);
		
		String n = sc.next();
		
		n = n.toUpperCase();
		
		int sum = 0;
		
		for ( int i = 0; i < n.length(); i++ )
		{
			char num = n.charAt(i);

			if ( num == 83 || num == 90 )
			{
				sum += (num-65)/3 + 2;
			}
			else
			{
				sum += (num-65)/3 + 3;
			}
			
		}

		System.out.println(sum);
		
		sc.close();
	}
}

 

 

문자를 연산해서 계산 잘 했다고 생각했는데 

자꾸 백준에서 틀렸다고 나온다. 틀린 이유를 생각해봤는데 어느 부분이 틀린건지 잘 모르겠다....

미해결로 두고 일단 다른 문제를 풀기로 했다... ㅠ

 

다른 분들은 CASE 문으로 풀었는데 나도 그렇게 풀어야할지...고민이다..

 

 

해결했다!

아스키코드 값을 3으로 나눌 때, 원하는 결과가 나오지 않는 케이스가 있었다. (V 라던가 ...)

그래서 그런 알파벳 경우는 IF 문 조건 안에 넣어서 해결..!!

package baekjoon;

import java.io.IOException;
import java.util.Scanner;
 
/**
 * 다이얼
 * 오래된 다이얼 전화기가 있다.
 * 숫자를 누르고 돌려야한다. 
 * 숫자를 누른 뒤에는 다시 처음으로 돌아가며, 숫자 1을 걸려면 총 2초가 필요하다. 
 * 한 칸 옆에 있는 숫자를 걸기 위해서는 1초씩 더 걸린다.
 * 할머니는 전화번호를 각 숫자에 해당하는 문자로 외운다.
 * 할머니가 외운 단어가 주어졌을 때, 전화를 걸기 위해 필요한 최소 시간을 구하시오.
 */
public class _5622 {
	
	public static void main(String args[]) throws IOException{
		
		Scanner sc = new Scanner(System.in);
		
		String n = sc.next();
		
		n = n.toUpperCase();
		
		int sum = 0;
		
		for ( int i = 0; i < n.length(); i++ )
		{
			char num = n.charAt(i);

			if ( num == 83 || num == 90 || num == 86 || num == 89 )
			{
				sum += (num-65)/3 + 2;
			}
			else
			{
				sum += (num-65)/3 + 3;
			}
			
		}

		System.out.println(sum);
		
		sc.close();
	}
}

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기