-
[Baekjoon(백준)][4659번] 비밀번호 발음하기(C++)2024년 01월 30일
- 유니얼
-
작성자
-
2024.01.30.:07
728x90안녕하세요! 오늘은 코딩테스트 문제 중 하나인 "비밀번호 발음하기" 문제를 해결하는 방법에 대해 설명하려고 합니다. 문자열이 특정 규칙을 만족하는지 확인하는 문제입니다. 문제를 해결하는 과정과 코드를 자세히 알아보겠습니다.
문제링크:
https://www.acmicpc.net/problem/4659
문제 개요
"비밀번호 발음하기" 문제는 문자열이 특정 규칙을 만족하는지 확인하는 문제입니다. 규칙은 다음과 같습니다:
- 하나 이상의 모음(a, e, i, o, u)을 포함해야 함.
- 모음이나 자음이 3개 연속으로 오면 안 됨.
- 같은 글자가 연속적으로 두 번 오면 안 되나, "ee"와 "oo"는 허용.
해결 방법
문자열을 순회하면서 위의 규칙을 검사합니다. 각 글자가 모음인지 자음인지 확인하고, 연속된 문자들이 규칙을 위반하는지 검사합니다.
코드 구현
#include <iostream> #include <vector> #include <queue> using namespace std; // 모음인지 확인하는 함수 bool check_1(char input) { return input == 'a' || input == 'e' || input == 'i' || input == 'o' || input == 'u'; } // 자음인지 확인하는 함수 bool check_1_1(char input) { return !check_1(input) && input >= 'b' && input <= 'z'; } // 연속 3글자가 모두 모음이거나 모두 자음인지 확인하는 함수 bool check_2(char input1, char input2, char input3) { return (check_1(input1) && check_1(input2) && check_1(input3)) || (check_1_1(input1) && check_1_1(input2) && check_1_1(input3)); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); while (true) { string a; cin >> a; if (a == "end") break; bool check1 = false; // 모음을 포함하는지 체크 bool isPrinted = false; // 출력 여부 체크 for (int i = 0; i < a.size(); i++) { if (!check1 && check_1(a[i])) { check1 = true; } if (a.size() >= 3 && i + 2 < a.size() && check_2(a[i], a[i + 1], a[i + 2])) { cout << "<" << a << ">" << " is not acceptable.\n"; isPrinted = true; break; } if (a.size() >= 2 && i + 1 < a.size() && a[i] == a[i + 1] && a[i] != 'e' && a[i] != 'o') { cout << "<" << a << ">" << " is not acceptable.\n"; isPrinted = true; break; } } if (!isPrinted) { cout << "<" << a << ">" << (check1 ? " is acceptable.\n" : " is not acceptable.\n"); } } }
코드 설명
이 코드는 주어진 비밀번호가 규칙을 준수하는지 검사합니다. 문자열을 순회하면서 모음의 존재 여부, 연속된 3개의 글자가 모두 모음이거나 자음인 경우, 그리고 같은 글자가 연속적으로 나오는 경우를 체크합니다. 모든 조건을 만족하면 "acceptable"을, 그렇지 않으면 "not acceptable"을 출력합니다.
결론
"비밀번호 발음하기" 문제는 문자열 검사와 간단한 조건문을 사용하여 해결할 수 있습니다. 주어진 규칙을 코드로 올바르게 구현하는 것이 중요합니다.
반응형다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드
받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이
감지되어도 모달 창이 표시되지 않습니다.)