// 문제
상근이의 할머니는 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 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 |
---|