문제
https://www.acmicpc.net/problem/1835
풀이
- 8명이 설 수 있는 모든 경우에 대해서 각 조건을 모두 만족하는지 확인하면 된다.
유의할 점
- int 와 char을 비교해서 시간을 많이 소모했다. 코드를 꼼꼼히 확인하자
코드
import java.util.*;
class Solution {
static boolean[] visited;
static HashMap<Character, Integer> map = new HashMap<>();
static String[] d;
static int answer=0;
static char[] characters = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
public int solution(int n, String[] data) {
answer=0;
d= data;
visited = new boolean[8];
dfs(0);
return answer;
}
static void dfs(int len){
if(len == 8) {
for(String s : d){
char a = s.charAt(0);
char b= s.charAt(2);
char op = s.charAt(3);
int gap = s.charAt(4)-'0';
int g = (int)Math.abs(map.get(a)- map.get(b))-1;
if(op == '>'){
if(gap >= g) return;
} else if(op == '='){
if(gap != g) return;
} else if(op=='<') {
if(gap <= g) return;
}
}
answer++;
return;
}
for(int i=0; i<8; i++){
if(visited[i]) continue;
visited[i] = true;
map.put(characters[i], len);
dfs(len+1);
visited[i] = false;
}
}
}