https://school.programmers.co.kr/learn/courses/30/lessons/1835
๋ฌธ์
๋ฌธ์ ์ค๋ช
๊ฐ์์ ๋ง์ ์นด์นด์คํ๋ ์ฆ๋ ๋จ์ฒด๋ก ์ํ์ ๋ ๋ฌ๋ค. ์ฆ๊ฑฐ์ด ์๊ฐ์ ๋ณด๋ด๊ณ ๋ง์ง๋ง์ ๋จ์ฒด์ฌ์ง์ ์ฐ๊ธฐ ์ํด ์นด๋ฉ๋ผ ์์ ์ผ๋ ฌ๋ก ๋๋ํ ์ฐ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์๊ฐ ์ํ๋ ๋ฐฐ์น๊ฐ ๋ชจ๋ ๋ฌ๋ผ ์ด๋ค ์์๋ก ์ค์ง ์ ํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค. ๋ค์ค๋ ํ๋ก๋์ ๋๋ํ ์๊ธฐ๋ฅผ ์ํ๊ณ , ํ๋ธ๊ฐ ๋ฟ์ ๋ถ์ ๋ง์ ์ ์ด ์๋ ๋ผ์ด์ธ์ ํ๋ธ์๊ฒ์ ์ ์ด๋ ์ธ ์นธ ์ด์ ๋จ์ด์ ธ์ ์๊ธฐ๋ฅผ ์ํ๋ค. ์ฌ์ง์ ์ฐ๊ณ ๋์ ๋์์ค๋ ๊ธธ์, ๋ฌด์ง๋ ๋ชจ๋๊ฐ ์ํ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์๋ ๋ค๋ฅด๊ฒ ์๋ ๋ฐฉ๋ฒ์ด ์์ง ์์์๊น ์๊ฐํด๋ณด๊ฒ ๋์๋ค. ๊ฐ ํ๋ ์ฆ๊ฐ ์ํ๋ ์กฐ๊ฑด์ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ ๋ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์๋๋ก ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์.
์ ๋ ฅ ํ์
์ ๋ ฅ์ ์กฐ๊ฑด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ n๊ณผ n๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด ๋ฐฐ์ด data๋ก ์ฃผ์ด์ง๋ค. data์ ์์๋ ๊ฐ ํ๋ ์ฆ๊ฐ ์ํ๋ ์กฐ๊ฑด์ด N~F=0๊ณผ ๊ฐ์ ํํ์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ ํ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- 1 <= n <= 100
- data์ ์์๋ ๋ค์ฏ ๊ธ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ด๋ค. ๊ฐ ์์์ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒซ ๋ฒ์งธ ๊ธ์์ ์ธ ๋ฒ์งธ ๊ธ์๋ ๋ค์ 8๊ฐ ์ค ํ๋์ด๋ค. {A, C, F, J, M, N, R, T} ๊ฐ๊ฐ ์ดํผ์น, ์ฝ, ํ๋ก๋, ์ ์ด์ง, ๋ฌด์ง, ๋ค์ค, ๋ผ์ด์ธ, ํ๋ธ๋ฅผ ์๋ฏธํ๋ค. ์ฒซ ๋ฒ์งธ ๊ธ์๋ ์กฐ๊ฑด์ ์ ์ํ ํ๋ ์ฆ, ์ธ ๋ฒ์งธ ๊ธ์๋ ์๋๋ฐฉ์ด๋ค. ์ฒซ ๋ฒ์งธ ๊ธ์์ ์ธ ๋ฒ์งธ ๊ธ์๋ ํญ์ ๋ค๋ฅด๋ค.
- ๋ ๋ฒ์งธ ๊ธ์๋ ํญ์ ~์ด๋ค.
- ๋ค ๋ฒ์งธ ๊ธ์๋ ๋ค์ 3๊ฐ ์ค ํ๋์ด๋ค. {=, <, >} ๊ฐ๊ฐ ๊ฐ์, ๋ฏธ๋ง, ์ด๊ณผ๋ฅผ ์๋ฏธํ๋ค.
- ๋ค์ฏ ๋ฒ์งธ ๊ธ์๋ 0 ์ด์ 6 ์ดํ์ ์ ์์ ๋ฌธ์ํ์ด๋ฉฐ, ์กฐ๊ฑด์ ์ ์๋๋ ๊ฐ๊ฒฉ์ ์๋ฏธํ๋ค. ์ด๋ ๊ฐ๊ฒฉ์ ๋ ํ๋ ์ฆ ์ฌ์ด์ ์๋ ๋ค๋ฅธ ํ๋ ์ฆ์ ์์ด๋ค.
์ถ๋ ฅ ํ์
๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฆฌํดํ๋ค.
์์ ์ ์ถ๋ ฅ
n | data | answer |
---|---|---|
2 | ["N~F=0","R~T>2"] | 3648 |
2 | ["M~C<2","C~M>1"] | 0 |
ํ์ด
1) DFS๋ฅผ ์ด์ฉํด์ 8๋ช
์ ์นด์นด์ค ํ๋ ์ฆ๋ค์ 8๊ฐ์ ์๋ฆฌ์ ๋ฐฐ์น
2) 8๋ช
์ ๋ชจ๋ ๋ฐฐ์นํ๋ค๋ฉด, ์กฐ๊ฑด์ ๋ง๋์ง ํ์ธ!
3) ๋ง๋ค๋ฉด, answer += 1
์ฝ๋
import java.util.HashMap;
import java.util.Map;
public class L2_๋จ์ฒด์ฌ์ง_์ฐ๊ธฐ {
static Map<Character, Integer> friends;
static boolean[] isVisited;
static int[] position;
static int answer;
public static int solution(int n, String[] data) {
friends = new HashMap<>();
isVisited = new boolean[8];
position = new int[8];
answer = 0;
char[] kakaos = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
for (int i = 0; i < 8; i++) friends.put(kakaos[i], i);
DFS(0, data);
return answer;
}
private static void DFS(int idx, String[] data) {
if (idx == 8) {
if(isPossible(data)) answer += 1;
return;
}
for (int i = 0; i < 8; i++) {
if(isVisited[i]) continue;
isVisited[i] = true;
position[idx] = i;
DFS(idx + 1, data);
isVisited[i] = false;
}
}
private static boolean isPossible(String[] data) {
for (String d : data) {
int x = position[friends.get(d.charAt(0))];
int y = position[friends.get(d.charAt(2))];
char compare = d.charAt(3);
int diff = (int) d.charAt(4) - '0';
int numOfBetween = Math.abs(y - x) - 1;
switch (compare) {
case '=':
if(diff != numOfBetween) return false;
break;
case '<':
if(numOfBetween >= diff) return false;
break;
case '>':
if(numOfBetween <= diff) return false;
break;
}
}
return true;
}
public static void main(String[] args) {
String[] data = {"N~F=0", "R~T>2"};
// String[] data = {"M~C<2", "C~M>1"};
System.out.println(solution(2, data));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Programmers ] ๊ธฐ๋ฅ ๊ฐ๋ฐ ( ์๋ฐ / JAVA ) (0) | 2022.09.01 |
---|---|
[ Programmers ] 124 ๋๋ผ์ ์ซ์ ( ์๋ฐ / JAVA ) (0) | 2022.09.01 |
[ Programmers ] ์นด์นด์คํ๋ ์ฆ ์ปฌ๋ฌ๋ง๋ถ ( ์๋ฐ / JAVA ) (0) | 2022.08.31 |
[ Programmers ] ์คํ์ฑํ ๋ฐฉ ( ์๋ฐ / JAVA ) (0) | 2022.08.31 |
[ Progammers ] ๋ฌธ์์ด ์์ถ ( ์๋ฐ / JAVA ) (0) | 2022.08.31 |