728x90
문제
https://www.acmicpc.net/problem/2941
2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
해결
1. 여러 개의 문자로 이루어진 크로아티아 알파벳 8개(c=, c-, dz=, d-, lj, nj, s=, z=)를 하나로 인식해야 한다
2. StringIndexOutOfBoundsException 주의
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str = sc.next();
int cnt = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == 'c') {
if (str.charAt(i + 1) == '=' || str.charAt(i + 1) == '-') {
i++;
}
} else if (ch == 'd') {
if (str.charAt(i + 1) == '-') {
i++;
} else if (str.charAt(i + 1) == 'z') {
if (str.charAt(i + 2) == '=') {
i += 2;
}
}
} else if (ch == 'l') {
if (str.charAt(i + 1) == 'j') {
i++;
}
} else if (ch == 'n') {
if (str.charAt(i + 1) == 'j') {
i++;
}
} else if (ch == 's') {
if (str.charAt(i + 1) == '=') {
i++;
}
} else if (ch == 'z') {
if (str.charAt(i + 1) == '=') {
i++;
}
}
cnt++;
}
System.out.println(cnt);
}
}
|
cs |

c, d, l, n, s, z가 마지막 문자인 경우에는 charAt(i + 1)가 존재하기 않기 때문에 StringIndexOutOfBoundsException 에러가 발생한다.
i의 값이 입력받은 문자열의 길이 -1 보다 작을 경우에만 다음 조건문을 실행시키면 해결된다.
다만, dz=를 검사할 때는 i가 문자열의 길이 - 2 보다 작아야 한다.
구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str = sc.next(); // 문자열 입력받음
int cnt = 0; // 크로아티아 알파벳의 개수를 세는 변수를 선언하고 0으로 초기화
for (int i = 0; i < str.length(); i++) { // 입력받은 문자열의 길이만큼 for문 실행
char ch = str.charAt(i);
if (ch == 'c' && i < str.length() - 1) { // 만약 i번째 문자가 c라면
if (str.charAt(i + 1) == '=' || str.charAt(i + 1) == '-') { // 만약 c 다음의 문자가 = 또는 -라면
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
}
} else if (ch == 'd' && i < str.length() - 1) {
if (str.charAt(i + 1) == '-') { // d-일 경우
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
} else if (str.charAt(i + 1) == 'z' && i < str.length() - 2) {
if (str.charAt(i + 2) == '=') { // dz= 일 경우
i += 2; // i + 2까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 2 증가시킴
}
}
} else if (ch == 'l' && i < str.length() - 1) {
if (str.charAt(i + 1) == 'j') { // lj일 경우
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
}
} else if (ch == 'n' && i < str.length() - 1) {
if (str.charAt(i + 1) == 'j') { // nj일 경우
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
}
} else if (ch == 's' && i < str.length() - 1) {
if (str.charAt(i + 1) == '=') { // s=일 경우
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
}
} else if (ch == 'z' && i < str.length() - 1) {
if (str.charAt(i + 1) == '=') { // z=일 경우
i++; // i + 1까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 i의 값을 1 증가시킴
}
}
cnt++; // 위의 조건식을 통과한 후에 증가하므로 크로아티아 알파벳의 개수만큼 증가한다
}
System.out.println(cnt);
}
}
|
cs |
결과
728x90
'Algorithm > Beakjoon' 카테고리의 다른 글
[Java] baekjoon 1920 : 수 찾기 / 이분 탐색 (0) | 2021.09.01 |
---|---|
[Java] baekjoon 1712 : 손익분기점 / 기본 수학 1 (0) | 2021.08.31 |
[Java] baekjoon 4344 : 평균은 넘겠지 / 1차원 배열 (0) | 2021.08.28 |
[Java] baekjoon 8958 : OX퀴즈 / 1차원 배열 (0) | 2021.08.27 |
[Java] baekjoon 3052 : 나머지 / 1차원 배열 (0) | 2021.08.26 |
댓글