본문 바로가기
personal 과제/hyeon's personal

백준 5622번

by hyeon0521 2024. 10. 9.

// 문제 

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

전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다. 상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다. 할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

 

// 체크포인트

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

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

 

// 내 말로 정리하기

1. 상근이 할머니에게 단어받고, 단어길이 제한 걸기

2. 받은 문자들을 숫자랑 연결시키기 -> a,b,c 는 3초 d,e,f는 4초

3. 각 문자에 해당하는 숫자 모두 더해서 출력하기

 

// 코드로 작성하기

package BKEX;

import java.util.Locale;
import java.util.Scanner;

public class BK5622 {
    public static void main(String[] args) {
        // 상근할미에게 문자 받기. 2<=문자길이<=15
        System.out.println("할머니 단어를 입력하셔요");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        // 대소문자 구분없이 출력되게 하기 위해 받은 문자를 모두 소문자로 변환하기
        String nstr = str.toLowerCase();
        // 문자의 합을 출력하는 sum 선언
        int sum = 0;

        for (int i = 0; i < str.length(); i++) {
            // 글자를 하나씩 대조하기 위하여 charAt()사용
            switch (nstr.charAt(i)) {
                case 'a': case 'b': case 'c':
                    sum += 3;
                    break;
                case 'd': case 'e': case 'f':
                    sum += 4;
                    break;
                case 'g': case 'h': case 'i':
                    sum += 5;
                    break;
                case 'j': case 'k': case 'l':
                    sum += 6;
                    break;
                case 'm': case 'n': case 'o':
                    sum += 7;
                    break;
                case 'p': case 'q': case 'r': case 's':
                    sum += 8;
                    break;
                case 't': case 'u': case 'v':
                    sum += 9;
                    break;
                case 'w': case 'x': case 'y': case 'z':
                    sum += 10;
                    break;
            }

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

// 배운 내용

1. 문자를 하나씩 잘라서 비교하려고 하다가,  charAt 발견.

charAt(i): 문자열의 i 번째 문자를 반환하는 메서드. 따라서 for(int i=0; i<str.length(); i++) 문으로 하나씩 반환한 문자 i를 아래 조건문과 비교할 수 있게 됨. 

 

2. toLowerCase() : 문자열을 소문자로 반환해주는 메서드. 문제는 대문자로 받지만, 조금 더 업그레이드해서 상근이 할미를 배려해보았다. 수업시간에 배우긴 했는데, 이렇게 찾아서 적용시키니까 확실히 쓰는 방법이 보인다. 

'personal 과제 > hyeon's personal' 카테고리의 다른 글

백준 2884번  (0) 2024.10.01