https://programmers.co.kr/learn/courses/30/lessons/64064?language=java
๋ฌธ์
๊ฐ๋ฐํ ๋ด์์ ์ด๋ฒคํธ ๊ฐ๋ฐ์ ๋ด๋นํ๊ณ ์๋ "๋ฌด์ง"๋ ์ต๊ทผ ์งํ๋ ์นด์นด์ค์ด๋ชจํฐ์ฝ ์ด๋ฒคํธ์ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋น์ฒจ์ ์๋ํ ์๋ชจ์๋ค์ ๋ฐ๊ฒฌํ์์ต๋๋ค. ์ด๋ฐ ์๋ชจ์๋ค์ ๋ฐ๋ก ๋ชจ์ ๋ถ๋ ์ฌ์ฉ์๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ชฉ๋ก์ ๋ง๋ค์ด์ ๋น์ฒจ ์ฒ๋ฆฌ ์ ์ ์ธํ๋๋ก ์ด๋ฒคํธ ๋น์ฒจ์ ๋ด๋น์์ธ "ํ๋ก๋" ์๊ฒ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋ ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ์ํด ์ฌ์ฉ์ ์์ด๋ ์ค ์ผ๋ถ ๋ฌธ์๋ฅผ '*' ๋ฌธ์๋ก ๊ฐ๋ ค์ ์ ๋ฌํ์ต๋๋ค. ๊ฐ๋ฆฌ๊ณ ์ ํ๋ ๋ฌธ์ ํ๋์ '*' ๋ฌธ์ ํ๋๋ฅผ ์ฌ์ฉํ์๊ณ ์์ด๋ ๋น ์ต์ ํ๋ ์ด์์ '*' ๋ฌธ์๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
"๋ฌด์ง"์ "ํ๋ก๋"๋ ๋ถ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋งคํ๋ ์๋ชจ์ ์์ด๋๋ฅผ ์ ์ฌ ์์ด๋ ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ก ํ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ฒคํธ์ ์๋ชจํ ์ ์ฒด ์ฌ์ฉ์ ์์ด๋ ๋ชฉ๋ก์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
์๋ชจ์ ์์ด๋
frodo |
fradi |
crodo |
abc123 |
frodoc |
๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ ์ฌ์ฉ์ ์์ด๋ ๋ชฉ๋ก์ด ์ ๋ฌ๋ ๊ฒฝ์ฐ,
๋ถ๋ ์ฌ์ฉ์
fr*d* |
abc1** |
๋ถ๋ ์ฌ์ฉ์์ ๋งคํ๋์ด ๋น์ฒจ์์ ์ ์ธ๋์ด์ผ ์ผ ํ ์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
์ ์ฌ ์์ด๋
frodo |
abc123 |
์ ์ฌ ์์ด๋
fradi |
abc123 |
์ด๋ฒคํธ ์๋ชจ์ ์์ด๋ ๋ชฉ๋ก์ด ๋ด๊ธด ๋ฐฐ์ด user_id์ ๋ถ๋ ์ฌ์ฉ์ ์์ด๋ ๋ชฉ๋ก์ด ๋ด๊ธด ๋ฐฐ์ด banned_id๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋น์ฒจ์์ ์ ์ธ๋์ด์ผ ํ ์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ ๋ช๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ๊ฐ๋ฅํ ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- user_id ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 8 ์ดํ์ ๋๋ค.
- user_id ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ ๊ธธ์ด๊ฐ 1 ์ด์ 8 ์ดํ์ธ ๋ฌธ์์ด์
๋๋ค.
- ์๋ชจํ ์ฌ์ฉ์ ์์ด๋๋ค์ ์๋ก ์ค๋ณต๋์ง ์์ต๋๋ค.
- ์๋ชจํ ์ฌ์ฉ์ ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์์ ์ซ์๋ก๋ง์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- banned_id ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ user_id ๋ฐฐ์ด์ ํฌ๊ธฐ ์ดํ์ ๋๋ค.
- banned_id ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ ๊ธธ์ด๊ฐ 1 ์ด์ 8 ์ดํ์ธ ๋ฌธ์์ด์
๋๋ค.
- ๋ถ๋ ์ฌ์ฉ์ ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์์ ์ซ์, ๊ฐ๋ฆฌ๊ธฐ ์ํ ๋ฌธ์ '*' ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๋ถ๋ ์ฌ์ฉ์ ์์ด๋๋ '*' ๋ฌธ์๋ฅผ ํ๋ ์ด์ ํฌํจํ๊ณ ์์ต๋๋ค.
- ๋ถ๋ ์ฌ์ฉ์ ์์ด๋ ํ๋๋ ์๋ชจ์ ์์ด๋ ์ค ํ๋์ ํด๋นํ๊ณ ๊ฐ์ ์๋ชจ์ ์์ด๋๊ฐ ์ค๋ณตํด์ ์ ์ฌ ์์ด๋ ๋ชฉ๋ก์ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- ์ ์ฌ ์์ด๋ ๋ชฉ๋ก๋ค์ ๊ตฌํ์ ๋ ์์ด๋๋ค์ด ๋์ด๋ ์์์ ๊ด๊ณ์์ด ์์ด๋ ๋ชฉ๋ก์ ๋ด์ฉ์ด ๋์ผํ๋ค๋ฉด ๊ฐ์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ํ๋๋ก ์ธ๋ฉด ๋ฉ๋๋ค.
ํ์ด
DFS
๋ฅผ ์ด์ฉํด ์กฐํฉ์ ๋ง๋ค์ด์ ํผ ๋ฌธ์
๋์ ๊ฐ์ธ์ ์ธ ์๊ฐ์ด์ง๋ง, DFS / BFS
๋ ์ฌ๋ฌ ๋ฌธ์ ์์ ๋ค์ํ๊ฒ ์ฐ์ผ ์ ์๋ ๊ฒ ๊ฐ๋ค.
LinkedList<String> tmp = new LinkedList<>();
for(String l : list)
tmp.add(l);
Collections.sort(tmp);
if(!set.contains(tmp)){
set.add(tmp);
answer++;
}
์ด๋ฐ ์์ผ๋ก ๋ด์ list๋ฅผ ๋ค์ tmp๋ก ์ฎ๊ฒจ์ค ํ์ ์ ๋ ฌํ ์ด์ ๐ ํธ์ถ๋ ์ด๋ฒ DFS๊ฐ return ๋ ํ ๋ง์ง๋ง์ ๋ด์ id๋ฅผ ์ญ์ ํด์ฃผ๋๋ฐ list๊ฐ ์ ๋ ฌ๋๋ฉด ์์๊ฐ ๊ผฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ํ๋ฉด์ ์ญ์ ๋ฅผ ๊น๋จน์๋๋ฐ answer++์ ์๋ฏธ์....ใ
์ฝ๋
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class ๋ถ๋์ฌ์ฉ์ {
static boolean[] isVisited;
static Set<LinkedList<String>> set;
static LinkedList<String> list;
static int answer;
public static int solution(String[] user_id, String[] banned_id) {
answer = 0;
isVisited = new boolean[user_id.length];
set = new HashSet<>();
list = new LinkedList<>();
DFS(0, user_id, banned_id);
return set.size();
}
private static void DFS(int cnt, String[] user_id, String[] banned_id) {
if(cnt == banned_id.length){
// ์ ๋ ฌ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ return ๋ ํ, ๋ง์ง๋ง ์ญ์ ์ ๋ค๋ฅธ ๊ฒ์ด ์ญ์ ๋๊ธฐ๋๋ฌธ
LinkedList<String> tmp = new LinkedList<>();
for(String l : list)
tmp.add(l);
Collections.sort(tmp);
if(!set.contains(tmp)){
set.add(tmp);
answer++;
}
return;
}
for(int i = 0 ; i < user_id.length ; i++){
if(!isVisited[i] && check(user_id[i], banned_id[cnt])){
isVisited[i] = true;
list.addLast(user_id[i]);
DFS(cnt+1, user_id, banned_id);
list.removeLast();
isVisited[i] = false;
}
}
}
// ๊ธ์์๊ฐ ๊ฐ๊ณ * ๋ฅผ ์ ์ธํ char์ด ์ผ์นํ๋ฉด true
private static boolean check(String originId, String bannedId) {
if(originId.length() != bannedId.length())
return false;
for(int i = 0 ; i < originId.length() ; i++){
if(bannedId.charAt(i) != '*' && bannedId.charAt(i) != originId.charAt(i))
return false;
}
return true;
}
public static void main(String[] args) {
String[] user_id = {"frodo", "fradi", "crodo", "abc123", "frodoc"};
String[] banned_id = {"fr*d*", "*rodo", "******", "******"};
System.out.println(solution(user_id, banned_id));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ์ด์ค์ฐ์ ์์ํ (0) | 2021.09.29 |
---|---|
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] 2 X n ํ์ผ๋ง (0) | 2021.09.28 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ณด์ ์ผํ (0) | 2021.09.23 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ํ ํธ์ง (0) | 2021.09.23 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ์ ํ ๋ฒ์ค (0) | 2021.09.21 |