백준 2941번 자바
https://www.acmicpc.net/problem/2941
문제 내용은 아래 더보기를 누르면 나온다.
알고리즘
크로아티아 알파벳을 제외한 알파벳들은 1글자씩 센다.
주어진 단어가 크로아티아 알파벳으로 몇 글자인지 출력하면 된다.
이것도 전에 풀었던 5622번 문제처럼 풀면 되겠다.
1. 단어를 입력받는다.
2. 단어를 byte[] 로 변환한다.
3. 숫자를 셀 count를 만든다.
4. 단어의 길이수만큼 반복한다.
4-1. 크로아티아 알파벳으로 시작하는가?
1) 맞다면 다음 문자까지 확인했을 때 크로아티아 알파벳이 맞는가?
- 반복하는 인덱스 숫자에 1을 더하여 다음 문자는 건너뛴다.
4-2. count++ 한다.
5. count를 출력한다.
풀이1
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class No_2941 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
byte[] byteArr = br.readLine().getBytes();
int count = 0;
for (int i = 0; i < byteArr.length; i++) {
if (byteArr[i] == 'c' && i < byteArr.length - 1) {
if (byteArr[i + 1] == '=' || byteArr[i + 1] == '-') {
i++;
}
} else if (byteArr[i] == 'd' && i < byteArr.length - 1) {
if (byteArr[i + 1] == 'z' && i < byteArr.length - 2) {
if (byteArr[i + 2] == '=') {
i += 2;
}
} else if (byteArr[i + 1] == '-') {
i++;
}
} else if (byteArr[i] == 'l' && i < byteArr.length - 1) {
if (byteArr[i + 1] == 'j') {
i++;
}
} else if (byteArr[i] == 'n' && i < byteArr.length - 1) {
if (byteArr[i + 1] == 'j') {
i++;
}
} else if (byteArr[i] == 's' && i < byteArr.length - 1) {
if (byteArr[i + 1] == '=') {
i++;
}
} else if (byteArr[i] == 'z' && i < byteArr.length - 1) {
if (byteArr[i + 1] == '=') {
i++;
}
}
count++;
}
System.out.println(count);
}
}
알고리즘대로 풀었는데 여기서 좀 더 추가된게 길이이다.
만약 확인해야할 문자가 1문자밖에 안남았는데 그 다음 문자를 확인하려 한다면 예외가 발생한다.
그래서 다음 문자가 있는지 확인해야하기 때문에 길이로 확인하는 것이다.
크로아티아 문자가 맞다면 반복하는 인덱스 i를 1+ 해주면 다음 문자는 건너뛰게 된다.
모든 조건이 끝난후 count를 1+ 해준다.
그리고 모든 반복이 끝나고 countf를 출력하면 된다.
이렇게 봤을때 switch문과 if문을 고민하게 된다.
둘다 비슷하지만 코드를 깔끔하게 하려면 따로 함수를 만들어야 할 듯 하다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 1712번 - Java(자바) (0) | 2022.03.07 |
---|---|
[백준] 1316번 - Java(자바) (0) | 2022.03.05 |
[백준] 5622번 - Java(자바) (0) | 2022.02.27 |
[백준] 2908번 - Java(자바) (0) | 2022.02.23 |
[백준] 1152번 - Java(자바) (0) | 2022.02.21 |