백준 5622번 자바
https://www.acmicpc.net/problem/5622
문제 내용은 아래 더보기를 누르면 나온다.
알고리즘
알파벳 대문자로 이루어진 단어를 받는다.
단어의 길이는 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 |