반응형
문제
문제 설명
- A를 아스키코드로 변환하면 65인 것을 활용하여 문제를 풀었다.
2 | ABC | 0 1 2 | 0 |
3 | DEF | 3 4 5 | 1 |
4 | GHI | 6 7 8 | 2 |
5 | JKL | 9 10 11 | 3 |
6 | MNO | 12 13 14 | 4 |
7 | PQRS | 15 16 17 18 | 5 |
8 | TUV | 19 20 21 | 6 |
9 | WXYZ | 22 23 24 25 | 7 |
- 위는 다이얼을 표로 정리한 표이다. 3번째 열은 각각 문자를 숫자로 변환하고 65를 뺐을 때의 값이고, 4번째 열은 이를 3으로 나눴을 때의 몫의 값이다.
- 여기서 빨간색으로 표시한 18, 21, 24, 25만 다이얼 개수 문제로 몫의 값보다 1씩 크다
- 그래서 4개만 예외로 두고 3을 빼고 나누면 올바른 값이 나온다.
- 코드에서 문자에 59만 뺀 이유는 편의성을 위해서이다. 위의 표 3열에 모든 숫자에 +6을 하면 4열의 숫자는 +2씩 되니까 1열의 값과 일치하게 되니까 덜 헷갈리라고 한것이다. 근데 딱히 별 차이는 없는듯..
성공 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
int time = 0;
for (int i = 0; i < str.length(); i++) {
int n = (int)str.charAt(i) - 59;
if (n == 24 || n == 27 || n == 30 || n == 31)
n -= 3;
time += n / 3 + 1;
}
System.out.print(time);
}
}
반응형