안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.
이번 포스팅은 백준 문자열 문제 - 비밀번호 발음하기 자바 풀이를 진행하고자 합니다.
문제 출처: https://www.acmicpc.net/problem/4659
1. 풀이 소스
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = "";
boolean isPossible; // 가능한 경우 판단
boolean flag; // 모음 중 하나는 반드시 포함
boolean isVowelSeq; // 모음이 연속인지 ?
int seq; // 모음 연속
char pre; // 이전 문자열
while ((str = br.readLine()) != null && !str.equals("end")) {
pre = str.charAt(0);
seq = 0;
flag = isVowelSeq = false;
isPossible = true;
if (str.length() >= 1) { // 문자열이 1개 이상인 경우 pre 설정, flag = true
if (pre == 'a' || pre == 'e' || pre == 'i' || pre == 'o' || pre =='u') {
flag = true;
isVowelSeq = true; // 모음인 경우 true, 자음인 경우 false
}
seq++; // seq 증가
}
for (int i = 1; i < str.length(); i++) {
char c = str.charAt(i);
if (!flag && (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c =='u')) flag = true; // 아직 모음 판단 안한 경우
if (pre == c) { // 3번 같은 글자 연속 두번 불가
if (!(pre == 'e' || pre == 'o')) {
isPossible = false; // 불가능한 경우 종료
break;
}
}
// 2번 판단
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c =='u') {
if (isVowelSeq) seq++; // 모음 seq 증가
else { // 이전이 자음이었다면
isVowelSeq = true;
seq = 1;
}
} else { // 자음이라면
if (isVowelSeq) { // 이전이 모음이었다면
isVowelSeq = false;
seq = 1;
} else seq++; // 이전에도 자음이었으므로 seq 증가
}
if (seq >= 3) {
isPossible = false;
break;
}
pre = c;
}
if (flag && isPossible) {
sb.append("<").append(str).append("> is acceptable.").append("\n");
} else {
sb.append("<").append(str).append("> is not acceptable.").append("\n");
}
}
System.out.print(sb);
}
}
2. 풀이 중점 사항
주어진 3가지 조건을 만족하는 코드를 작성하기 위해 flag, isVowelSeq 등의 boolean 변수를 선언하였습니다.
자음과 모음에 대한 seq를 따로 설정하지 않아도 boolean 변수로 모음은 true, 자음은 false로 설정하여 seq를 한 번에 관리할 수 있었습니다.
자세한 코드는 주석처리 하였습니다. 감사합니다!
'Algorithm' 카테고리의 다른 글
[Algorithm] 백준 문자열 문제 - 파일 정리(20291) 자바 풀이 (0) | 2023.05.16 |
---|---|
[Algorithm] 백준 문자열 문제 - 염색체(9342) 자바 풀이 (0) | 2023.05.16 |
[Algorithm] 백준 문자열 문제 - 부분 문자열(6550) 자바 풀이 (0) | 2023.05.16 |
[Algorithm] 백준 투포인터 문제 - 부분합(1806) 자바 풀이 (0) | 2023.05.15 |
[Algorithm] 백준 투포인터 문제 - 두 수의 합(3273) 자바 풀이 (0) | 2023.05.15 |