1. 문제
https://www.acmicpc.net/problem/4659
2. 접근방법
비밀번호가 규칙에 맞는지 검사 후 허용, 비허용을 출력하는 문제
규칙은
1. 모음이 하나라도 포함되는지
2. 모음 or 자음이 3개이상 연속X
3. ee, oo 를 제외하고 같은 문자 2개 연속X
3가지 조건을 부합하는지 검사하면 된다.
그렇게 어렵진 않으나
주의할 점이라면
eee나 ooo의 경우
3번 규칙은 위반 하지 않으나 2번 규칙에는 위반 된다는 것 정도 있을 것 같다.
3. 자바 코드
package Silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class P4659비밀번호발음하기 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> arr = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
while (true) {
String s = br.readLine();
if (s.equals("end"))
break;
sb.append(check(s));
}
System.out.println(sb);
}
static String check(String s) {
boolean isAeiou = false;
boolean can = true;
char lastC = '1';
int conJa = 0;
int conMo = 0;
char[] mo = { 'a', 'e', 'i', 'o', 'u' };
for (char i : s.toCharArray()) {
boolean isMo = false;
for (char m : mo)
if (m == i) {
isMo = true;
break;
}
if (isMo) { // 모음
isAeiou = true;
conMo++;
conJa = 0;
} else { // 자음
conJa++;
conMo = 0;
}
if (lastC != 'e' && lastC != 'o' && lastC == i) {
can = false;
break;
}
if (conJa == 3 || conMo == 3) {
can = false;
break;
}
lastC = i;
}
String re = "<" + s + "> is ";
if (!isAeiou || !can) {
re += "not acceptable.";
} else
re += "acceptable.";
re += "\n";
return re;
}
}
4. 마치며
어렵지 않게 해결 가능한 문제.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준] 19236 청소년 상어 (0) | 2021.06.21 |
---|---|
[백준] 20061 모노미노도미노2 (0) | 2021.06.21 |
[백준] 15658 연산자 끼워넣기 (2) (2) | 2021.05.25 |
[백준] 2470 두 용액 (0) | 2021.04.14 |
[백준] 17090 미로 탈출하기 (4) | 2021.04.12 |