백준 5622번 자바
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
문제 내용은 아래 더보기를 누르면 나온다.
알고리즘
알파벳 대문자로 이루어진 단어를 받는다.
단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
알파벳 매칭되는 다이얼 번호는 다음과 같다.
2 = A, B, C
3 = D, E, F
4 = G, H ,I
5 = J, K ,L
6 = M, N ,O
7 = P, Q, R, S
8 = T, U ,V
9 = W, X, Y, Z
숫자 1은 2초, 숫자 2는 3초가 걸리므로 알파벳에 매칭되는 다이얼 번호에 1+ 더해주면 다이얼을 걸기 위한 시간이 만들어진다.
즉, 위의 알파벳에 매칭되는 다이얼 번호에 +1을 해줘서 계산해보자.
1. 단어를 입력받는다.
2. 단어를 문자로 구분한다.
3. 한 문자씩 비교하여 걸리는 시간을 구한다.
4. 걸린 시간을 출력한다.
풀이1
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class No_5622 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
byte[] byte_arr = br.readLine().getBytes();
int count = 0;
for (byte value : byte_arr) {
if ('A' <= value && value <= 'C') {
count += 3;
} else if ('D' <= value && value <= 'F') {
count += 4;
} else if ('G' <= value && value <= 'I') {
count += 5;
} else if ('J' <= value && value <= 'L') {
count += 6;
} else if ('M' <= value && value <= 'O') {
count += 7;
} else if ('P' <= value && value <= 'S') {
count += 8;
} else if ('T' <= value && value <= 'V') {
count += 9;
} else {
count += 10;
}
}
System.out.println(count);
}
}
br.readLine()으로 단어를 받고 getBytes() 메서드로 단어를 byte 배열로 반환받아서 byte_arr에 저장한다.
그리고 byte_arr의 값 하나씩 value에 넣어서 for문을 반복한다.
반복할 때 문자 하나의 값을 비교하여 해당하는 count에 더하고 마지막엔 출력하게 된다.
풀이2
import java.io.IOException;
public class No_5622 {
public static void main(String[] args) throws IOException{
int count = 0;
while(true) {
// 문자 하나 입력받기
int value = System.in.read();
// 끝이면 while문 종료
if(value == '\n') break;
// 어떤 문자인지 비교하여 count 더하기
if(value < 68) count += 3;
else if(value < 71) count += 4;
else if(value < 74) count += 5;
else if(value < 77) count += 6;
else if(value < 80) count += 7;
else if(value < 84) count += 8;
else if(value < 87) count += 9;
else count += 10;
}
System.out.println(count);
}
}
원시 입력방법인 System.in.read()로 바이트단위로 입력을 받는다.
즉, 한 문자씩 입력받아 IDE에 해당하는 인코딩값(e.g. 아스키코드)을 숫자로 바꾸어서 반환해준다.
그 문자 하나가 '\n' 개행이 아닐시 끝난게 아니므로 문자를 비교하는 것이다.
이 문제에서는 "알파벳에 해당하는 다이얼 넘버가 몇초이냐"를 어떻게 구분하느냐에 대한 문제인 것 같다.
- 풀이 1처럼 if-else 문으로만 바로 풀기
- 풀이 2처럼 while문을 무한반복하여 원시입력을 받아서 문자 1개를 바로 if-else문으로 바꾸어 풀기
- 알파벳 26자리에 해당하는 배열을 만들어서 값을 넣어놓고 그 문자에 해당하는 값을 꺼내서 계산하여 풀기
- 배열 방법이 성능이 낮게 나올것 같으면, switch - case문을 써서 풀기
이렇게 생각나는 방법들이 있다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 1316번 - Java(자바) (0) | 2022.03.05 |
---|---|
[백준] 2941번 - Java(자바) (0) | 2022.03.02 |
[백준] 2908번 - Java(자바) (0) | 2022.02.23 |
[백준] 1152번 - Java(자바) (0) | 2022.02.21 |
[백준] 1157번 - Java(자바) (0) | 2022.02.17 |