1. 문제

https://www.acmicpc.net/problem/4659

 

4659번: 비밀번호 발음하기

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp

www.acmicpc.net

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. 마치며

어렵지 않게 해결 가능한 문제.

 

+ Recent posts