๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/64064
์ ์ ์์ด๋ ๋ชฉ๋ก๊ณผ ์ผ๋ถ๊ฐ ์ง์์ง ์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ด ์ฃผ์ด์ก์ ๋,
๊ฐ๋ฅํ ์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ ์๋ฅผ ๋ฆฌํดํ๋ ๋ฌธ์ .
ํ์ด
์ ์ฌ ์์ด๋์ ์ผ๋ถ๊ฐ ๊ฐ๋ ค์ ธ์๊ธฐ ๋๋ฌธ์, ๋ค์ํ ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๋ค์ด ์ง ์์๋ค.
๋ง์ฝ ์ฃผ์ด์ง ์ ์ฌ ์์ด๋๊ฐ "Fr*d*" ๋ผ๋ฉด "Frodo"๋ก ๊ฐ๋ฅํ๊ณ "Frida" ๋ฑ๋ฑ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ชจ๋ ์์ด๋๋ฅผ ์ ์ฌ ๊ฐ๋ฅํ๋ค.
์ฌ์ง์ด "******" ์ฒ๋ผ ๋ชจ๋ ๊ฐ๋ ค์ง ์ ์ฌ ์์ด๋๋ผ๋ฉด ๊ธ์์๊ฐ ์ผ์นํ๋ ๋ชจ๋ ์์ด๋๋ฅผ ์ ์ฌํ ์ ์๋ค.
์ด์ฒ๋ผ ์ ์ฌ๊ฐ ์ผ๋์ผ ๋์์ผ๋ก ์ด๋ค์ง์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ธ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ์ผ๋จ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํด๋ณด์์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๋จผ์ , ์์์ ์ ์ฌ ์์ด๋ i๊ฐ ์ ์ฌํ ์ ์๋ ์ ์ ์์ด๋์ ๋ชฉ๋ก์ ๋ฐ๋ก ์์ฑํ๋ค.
์์ ๋ฅผ ๋ณด๋ฉด์ ์ค๋ช ํ์๋ฉด
์ ์ ์์ด๋ ๋ชฉ๋ก์ด ["frodo", "fradi", "crodo", "abc123", "frodoc"]
์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ด ["fr*d*", "abc1**"] ๋ผ๋ฉด
0๋ฒ์งธ ์ ์ฌ ์์ด๋ "fr*d"๊ฐ ์ ์ฌ ๊ฐ๋ฅํ ์ ์ ์์ด๋๋ 0๋ฒ์งธ "frodo"์ 1๋ฒ์งธ "fradi" ๋ ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
1๋ฒ์งธ ์ ์ฌ ์์ด๋ "abc1**" ์ 3๋ฒ์งธ ์ ์ ์์ด๋์ธ" abc123"๋ฅผ ์ ์ฌํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด can_ban[0] = {0, 1}, can_ban[1] = {3} ์ด๋ ๊ฒ ๋๋ค.
๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ ์ฌ ์์ด๋์ ๋ํด ์ ์ฌ ๊ฐ๋ฅํ ์ ์ ๋ค์ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ค.
์ด๋ ๊ฒ ํด์ ๋ชจ๋ ์ ์ฌ ์์ด๋์ ๋ํด ์ ์ฌํ ์์ด๋๋ฅผ ํ๋์ฉ ๋์์ํค๋ ๋ฐฉ์์ด๋ค.
์ด๋ฏธ ์ ์ฌ๋ ์์ด๋๋ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํด์ ์ฌ๋ฌ๊ฐ์ ์ ์ฌ ์์ด๋๊ฐ ํ๋์ ์ ์ ์์ด๋๋ฅผ ์ ์ฌํ์ง ์๋๋ก ํ๋ค.(์ผ๋์ผ ๋์)
๋ชจ๋ ์ ์ฌ ์์ด๋์ ๋ํด ํ๋์ฉ ์ ์ ์์ด๋๋ฅผ ํ๋์ฉ ๋์์์ผฐ๋ค๋ฉด ๋ชฉ๋ก ํ๋๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค.
๊ตฌํ์ ๋ฐฑํธ๋ํน์ ์ด์ฉํด์ ๊น์ด๊ฐ ๋ชจ๋ ์ ์ฌ ์์ด๋์ ์์ ๊ฐ์์ก์ ๊ฒฝ์ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋ ๋ํ๊ณ ๋ฆฌํด์์ผฐ๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ์ฌ๋ฌ๊ฐ์ ์ ์ฌ ์์ด๋๊ฐ ์ค๋ณต์ ์ผ๋ก ๊ฐ์ ์์ด๋๋ฅผ ์ ์ฌํ ์ ์์ ๋, ์ค๋ณต์ด ๋ฐ์ํ๋ค.
"*****" ๋ผ๋ ์ ์ฌ ์์ด๋์ "fr*d*" ๋ผ๋ ์ ์ฌ ์์ด๋๋ ๊ณตํต์ ์ผ๋ก "frodo", "frida" ๋ผ๋ ์์ด๋๋ฅผ ์ ์ฌํ ์ ์๋ค.
1. "*****" -> "frodo" , "fr*d*" -> "frida"
2. "*****" -> "frida" , "fr*d*" -> "frodo"
๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์ง๋ง ๊ฒฐ๊ณผ๋ง ๋๊ณ ๋ณธ๋ค๋ฉด ์ ์ฌ๋ ์์ด๋ ๋ชฉ๋ก์ ๊ฐ๊ฒ ํ์ฑ๋๋ค.
๋ฐ๋ผ์ ์์๊ฐ์ ์ค๋ณต์ ์ ๊ฑฐํด์ผํ๋ค.
ํฉํ ๋ฆฌ์ผ์ ์ด์ฉํด์ ์กฐํฉ์ ์ค๋ณต์ ์ ๊ฑฐํ๋ฉด ๋ ๊ฑฐ๋ผ ์๊ฐํ์ง๋ง ์๋์๋ค.
๊ฒฐ๊ตญ set์ ์ด์ฉํด์ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
์ ๊ฑฐ๋ ์์ด๋ ์ธ๋ฑ์ค๋ค์ ์ ๋ ฌํ ํ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ set์ ์ง์ด๋ฃ์๋ค.
๋ง์ฝ 0, 1, 3๋ฒ ์์ด๋๊ฐ ์ ์ฌ๋์๋ค๊ณ ํ๋ฉด ํด๋น ๋ฒํธ๋ค์ ๋ฌธ์์ด๋ก ์ด์ด๋ถ์ฌ "013"ํํ๋ก set์ ๋ฃ๋๋ค
set์ ์ค๋ณต์ ์์์ ์ ๊ฑฐํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ต์ข ์ ์ผ๋ก set์ ํฌ๊ธฐ๊ฐ ์ ๋ต์ด ๋๋ค.
์ฝ๋ ์์ฑ
|
#include <string>
#include <vector>
#include <iostream>
#include <set>
#include <algorithm>
#include <string.h>
using namespace std;
const int MAX_N = 10;
bool visited[MAX_N];
set<string> cases;
void backtracking(int depth, vector<int> can_ban[], int n, int& answer, vector<int> list){
if(depth == n){
sort(list.begin(),list.end());
string tmp = "";
for(auto l : list)
tmp += to_string(l);
cases.insert(tmp);
return;
}
for(int i = 0; i < can_ban[depth].size(); i++){
if(visited[can_ban[depth][i]])
continue;
visited[can_ban[depth][i]] = true;
list.push_back(can_ban[depth][i]);
backtracking(depth + 1, can_ban, n ,answer, list);
list.pop_back();
visited[can_ban[depth][i]] = false;
}
}
int solution(vector<string> user_id, vector<string> banned_id) {
int answer = 0;
vector<int> can_ban[9]; //i๋ฒ์งธ banned_id๊ฐ ban ๊ฐ๋ฅํ ์ ์ ์์ด๋ ๋ชฉ๋ก
vector<int> temp;
for(int i = 0; i<banned_id.size(); i++){
for(int j = 0; j<user_id.size();j++){
if(banned_id[i].length() != user_id[j].length())
continue;
bool chk = true;
for(int com = 0; com < banned_id[i].length(); com++){
if(banned_id[i][com] == '*')
continue;
if(banned_id[i][com] != user_id[j][com]){
chk = false;
break;
}
}
if(chk)
can_ban[i].push_back(j);
}
}
backtracking(0, can_ban, banned_id.size(), answer, temp);
answer = cases.size();
return answer;
}
|
cs |
'ํ๋ก๊ทธ๋๋จธ์ค > 3๋จ๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๊ธ๊ณผ ์ ์ด๋ฐํ๊ธฐ (0) | 2022.07.11 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : GPS (0) | 2022.07.08 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ํ ํธ์ง (0) | 2022.07.07 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : [1์ฐจ] ์ ํ๋ฒ์ค (0) | 2022.07.06 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : [1์ฐจ] ์ถ์ ํธ๋ํฝ (0) | 2022.06.30 |