2019 카카오 개발자 겨울 인턴십
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/64064
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
C++ 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector <string> answer_list;
vector <vector <int>> possible_numbers;
void make_list(int num, vector <bool> check) { //banned_id가 될 수 있는 아이디들의 조합 만들기
if (num >= possible_numbers.size()) {
string s = "";
for (int i = 0; i < check.size(); i++) {
if (check[i]) {
s += to_string(i);
}
}
for (int i = 0; i < answer_list.size(); i++) {
if (answer_list[i] == s) {
return;
}
}
answer_list.push_back(s);
return;
}
for (int i = 0; i < possible_numbers[num].size(); i++) {
if (check[possible_numbers[num][i]] == false) {
check[possible_numbers[num][i]] = true;
make_list(num + 1, check);
check[possible_numbers[num][i]] = false;
}
}
}
int solution(vector<string> user_id, vector<string> banned_id) {
int pos = 0;
int shorter_length = 0;
vector <bool> check;
check.assign(user_id.size(), false);
possible_numbers.resize(banned_id.size());
for (int i = 0; i < banned_id.size(); i++) {
for (int j = 0; j < user_id.size(); j++) {
shorter_length = banned_id[i].length() < user_id[j].length() ? banned_id[i].length() : user_id[j].length();
for (pos = 0; pos < shorter_length; pos++) {
if ((banned_id[i][pos] != '*') && (user_id[j][pos] != banned_id[i][pos])) {
break;
}
}
if ((pos >= shorter_length) && (banned_id[i].length() == user_id[j].length())) { //각 banned_id가 될 수 있는 아이디 찾기
possible_numbers[i].push_back(j);
}
}
}
make_list(0, check);
return answer_list.size();
}
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] N개의 최소공배수 (0) | 2020.04.03 |
---|---|
[프로그래머스] 최댓값과 최솟값 (0) | 2020.04.03 |
[프로그래머스] 소수 만들기 (0) | 2020.03.31 |
[프로그래머스] 튜플 (0) | 2020.03.31 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2020.03.31 |