본문 바로가기

알고리즘 · 코딩

[프로그래머스] 불량 사용자

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();
}

 

 

 

반응형