문제
https://www.acmicpc.net/problem/2941
2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
단어를 입력받은 다음 알파벳의 개수를 세는 문제이다.
크로아티아 알파벳을 포함해서 개수를 세야하는데, 크로아티아 알파벳은 표와 같이 변경되어 입력된다.
'c='가 입력되는 경우 1개의 알파벳으로 인식해야하며, 'dz='도 동일하게 1개의 알파벳으로 인식해야한다.
입력 출력
ljes=njak 6
입력 출력
ddz=z= 3
입력 출력
dz=ak 3
------------------------------------------------------------------------------------------------------------------
풀이
Scanner를 이용하여 단어를 문자열로 입력받은 뒤, 단어의 개수를 셀 count와 알파벳의 다음알파벳을 비교하기 위한 next_char 변수를 선언하였다.
for문을 이용하여 단어의 길이만큼 char형으로 한 글자씩 변환시켰다.
if문을 이용하여 c, d, l, n, s, z가 온 경우 다음 문자를 확인하도록 str.charAt(i+1)을 하였다.
제시된 표를 보면 c 뒤에는 =,- 가 오는경우 1개의 문자로 인식해야 하기 때문에 str.charAt(i+1)이 =, - 인 경우 i++를 하여 count하지 않고 바로 다음 알파벳으로 넘어가게 하였다.
d는 'dz=', 'd-' 으로 3단어로 이루어진 크로아티아 알파벳이 존재하는데, d > z > =을 순서대로 if문을 이용하여 비교하여 맞는 경우 i +=2 를 하여 다음 알파벳으로 넘기게 하였다.
마지막으로, Eclipse IDE에서는 테스트 케이스만 입력했을 때 제대로 동작하는데 제출하기를 하면 '런타임 에러 (StringIndexOutOfBounds)'가 계속 나오길래 다음 단어를 가져오는 next_char = str.charAt(i+1) 이 부분에서 마지막에 단어가 없는데 가져오려고 해서 발생하는 듯 하여 모든 if문 안에 str.length()-1, str.length() -2의 조건을 추가적으로 넣었다.
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
int count = 0;
char next_char;
sc.close();
for(int i=0;i<str.length();i++) {
char c = str.charAt(i);
if(c=='c') {
if(i<str.length()-1) {
next_char = str.charAt(i+1);
if(next_char == '=' || next_char == '-') {
i++;
}
}
}
else if(c=='d') {
if(i<str.length()-1) {
next_char = str.charAt(i+1);
if(next_char == 'z') {
if(i<str.length()-2) {
next_char = str.charAt(i+2);
if(next_char == '=') {
i += 2;
}
}
}
else if(next_char == '-') {
i++;
}
}
}
else if(c=='l' || c=='n') {
if(i<str.length()-1) {
next_char = str.charAt(i+1);
if(next_char == 'j') {
i++;
}
}
}
else if(c=='s' || c=='z') {
if(i<str.length()-1) {
next_char = str.charAt(i+1);
if(next_char == '=') {
i++;
}
}
}
count++;
}
System.out.println(count);
}
}
'문제 풀이' 카테고리의 다른 글
[백준] 2738번: 행렬 덧셈 - JAVA(자바) (0) | 2023.08.21 |
---|---|
[백준] 25206번: 너의 평점은 - JAVA(자바) (0) | 2023.08.11 |
[백준] 10988번: 팰린드롬인지 확인하기 - JAVA(자바) (0) | 2023.08.09 |
[백준] 1157번: 단어 공부 - JAVA (자바) (0) | 2023.08.09 |
[백준] 5622번: 다이얼 - JAVA (자바) (0) | 2023.08.06 |