안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.
이번 포스팅은 백준 크로아티아 알파벳 자바 풀이를 진행하고자 합니다.
문제 출처: https://www.acmicpc.net/problem/2941
1. 풀이 소스
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Set<String> set = new HashSet<>(List.of("c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="));
int result = 0; // 결과 출력
String str = br.readLine();
String tmp = ""; // 문자열
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
tmp += c; // 문자열 추가 하기
if (tmp.length() == 3) { // 3개인 경우 dz 이후 문자
if (tmp.equals("dz=")) {
result++; // 하나의 문자
tmp = ""; // 문자를 모두 소모한 경우이므로
} else {
result += 2; // 앞의 두개가 불가한 문자이므로
tmp = String.valueOf(c); // 새로운 c 설정
}
}
if (tmp.length() == 2) {
if (tmp.equals("dz")) continue; // dz=일수 있으므로 넘기기
if (set.contains(tmp)) tmp = "";
else tmp = String.valueOf(c);
result++; // 만약 set에 있다면 하나로 쳐서 ++, 만약 아니라면, 이전 길이에 대한 ++,
}
}
if (tmp.length() >= 1) { // 한개 혹은 두개에서 끝난 경우
result += tmp.length(); // 문자열이 있다는 것은 크로아티아 알파벳 만족 불가
}
System.out.print(result);
}
}
2, 풀이 중점 사항
정의해야 할 문자를 미리 set에 컬렉션 생성자로 생성하여 tmp 문자가 같은지 판단하는 방법으로 문제를 해결할 수 있었습니다.
실수하기 좋은 위치가 마지막에 한 번 더 tmp.length() >= 1 인지 확인하는 로직입니다.
예를 들어 tmp가 "" 아닌 상태에서 종료될 수 있습니다. 특정 문자 하나가 남아있거나, dz의 특성으로 continue 하여 넘어간 것일 수 있습니다. 따라서, tmp의 길이가 1 이상이라면 남아있는 문자열 개수를 더해주는 것이 중요하였습니다.
이상으로 크로아티아 알파벳 자바 풀이를 마치도록 하겠습니다.
감사합니다!
'Algorithm' 카테고리의 다른 글
[Algorithm] 백준 문자열 문제 - 동물원(1309) 자바 풀이 (0) | 2023.05.17 |
---|---|
[Algorithm] 백준 문자열 문제 - Java vs C++(3613) 자바 풀이 (2) | 2023.05.17 |
[Algorithm] 백준 문자열 문제 - 문자열 게임 2(20437) 자바 풀이 (2) | 2023.05.17 |
[Algorithm] 백준 문자열 문제 - 회문(17609) 자바 풀이 (0) | 2023.05.16 |
[Algorithm] 백준 문자열 문제 - 단어 뒤집기 2(17413) 자바 풀이 (0) | 2023.05.16 |