[ 백준 1759 ] 암호 만들기 (C++) - 조합, BackTracking

2024. 4. 4. 22:49· 문제풀이/알고리즘 문제 풀이
목차
  1. 🔗 문제 링크
  2. 💡 문제 풀이 및 해석
  3. ⭐️ 정답 코드 및 설명
  4. 🤔 문제 후기
728x90

🔗 문제 링크

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net


💡 문제 풀이 및 해석

  1. 주어진 단어중 정해진 갯수를 뽑는 조합문제이다.
  2. 조합으로 뽑은 다음에, 모음이 1개 이상, 자음이 2개 이상 들어갔는지 체크해주면 됩니다.

⭐️ 정답 코드 및 설명

#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;

int L, C;
bool visit[15];
vector<char> word;
set<string> answer;

void input() {
    cin >> L >> C;
    word = vector<char>(C);
    for (int i = 0; i < C; i++) {
        cin >> word[i];
    }
    sort(word.begin(), word.end());
}

bool isPassword(string password) {
    int passwordSize = password.size();
    bool aeiou = false;
    for (char c : password) {
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            passwordSize--;
            aeiou = true;
        }
    }
    if (passwordSize >= 2 && aeiou) return true;
    return false;
}

void dfs(int cnt, int index, string password) {
    if (cnt == L) {
        if (isPassword(password)) cout << password << endl;
        return;
    }

    for (int i = index; i < C; i++) {
        password += word[i];
        dfs(cnt + 1, i + 1, password);
        password.pop_back();
    }
    return;
}

int main() {

    input();
    dfs(0, 0, "");
    return 0;
}

🤔 문제 후기

처음에는 조합을 어떻게 했는지 기억나지 않았다. 오름차순으로 해야하니 아마 next_permutation을 사용해서 푸는 문제일 것으로 생각되는데, 솔직히 어떻게 쓰는지 기억이 잘 나지 않기도 하고, 간단한 조합이므로 그냥 구현해서 풀었다. 처음에는 i+1이 아닌 index+1을 줬었는데, 예제에 해당하는 답이 너무 이상하게 나와서 고민을 조금 하다가 생각해보니 a 다음은 b 다음은 c 다음은 d ... 순으로 가야하니 i+1을 넣어주는게 당연했다. 이 점을 제외하고는 문제를 푸는데 어려운 점은 없었다.

728x90

'문제풀이 > 알고리즘 문제 풀이' 카테고리의 다른 글

[ 프로그래머스 ] K진수에서 소수 구하기 (C++) - 수학  (0) 2024.04.05
[ 프로그래머스 ] 신고 결과 받기 (C++) - 자료구조  (0) 2024.04.05
[ 백준 16120 ] PPAP (C++) - 그리디  (0) 2024.04.02
[ 백준 12919 ] A와 B 2 (C++) - DFS  (0) 2024.04.01
[ 프로그래머스 ] 금과 은 운반하기 (C++) - 이분탐색  (1) 2024.03.23
  1. 🔗 문제 링크
  2. 💡 문제 풀이 및 해석
  3. ⭐️ 정답 코드 및 설명
  4. 🤔 문제 후기
'문제풀이/알고리즘 문제 풀이' 카테고리의 다른 글
  • [ 프로그래머스 ] K진수에서 소수 구하기 (C++) - 수학
  • [ 프로그래머스 ] 신고 결과 받기 (C++) - 자료구조
  • [ 백준 16120 ] PPAP (C++) - 그리디
  • [ 백준 12919 ] A와 B 2 (C++) - DFS
RealTone
RealTone
풀스택 개발자되기 기원 1년차
RealTone
개발공부 블로그
RealTone
전체
오늘
어제
  • 분류 전체보기 (85)
    • 개발자 공부 (8)
      • 인프라 - AWS (2)
      • Frontend - React (2)
      • Frontend - Next (2)
    • 구름톤트레이닝 (2)
      • 강의 후기 (0)
    • 문제풀이 (74)
      • 알고리즘 문제 풀이 (62)
      • SQL 문제 풀이 (12)
    • 개인 (0)
      • 멕북초기화세팅 (0)

블로그 메뉴

  • 홈
  • 태그
  • GitHub
  • 방명록

태그

  • AWS
  • baekjoon
  • CI/CD
  • codedeploy
  • ec2
  • G2
  • G3
  • G4
  • G5
  • git/github

최근 글

hELLO · Designed By 정상우.v4.2.2
RealTone
[ 백준 1759 ] 암호 만들기 (C++) - 조합, BackTracking
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.