728x90
package prog;
public class 단체사진찍기 {
public static void main(String[] args) {
Solution_단체사진찍기 s = new Solution_단체사진찍기();
System.out.println(s.solution(2 ,new String[]{"N~F=0", "R~T>2"}));
System.out.println(s.solution(2 ,new String[] {"M~C<2", "C~M>1"}));
}
}
class Solution_단체사진찍기{
static int N=8;
static boolean[] check=new boolean[N];
static char[] arr = new char[N];
static char[] members = {'A', 'C', 'F', 'J', 'M', 'N','R', 'T'};
static String[] oper;
static int answer;
public int solution(int n, String[] data) {
answer=0;
oper=data;
perm(0);
return answer;
}
private void perm(int cnt) {
if(cnt==N){
//System.out.println(Arrays.toString(arr));
if(findCheck()) answer++;
return;
}
for (int i = 0; i < N; i++) {
if(check[i]) continue;
arr[cnt]=members[i];
check[i]=true;
perm(cnt+1);
check[i]=false;
}
}
private boolean findCheck() {
for (int i = 0; i < oper.length; i++) {
char a = oper[i].charAt(0);
char b = oper[i].charAt(2);
char check =oper[i].charAt(3);
int distance = oper[i].charAt(4)-48;
// System.out.println("distance = " + distance);
int dist = findDistance(arr,a,b);
if(check=='='){
if(dist!=distance) return false;
}
else if(check=='<'){
if(dist>=distance) return false;
}
else if(check=='>'){
if(dist<=distance) return false;
}
}
return true;
}
private int findDistance(char[] array, char a, char b) {
int posA=0;
int posB=0;
for (int i = 0; i < array.length; i++) {
if(array[i]==a) posA=i;
else if(array[i]==b) posB=i;
}
return Math.abs(posA-posB)-1;
}
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
124 나라의 숫자 (자바) (0) | 2021.09.06 |
---|---|
멀쩡한 사각형 (자바) (0) | 2021.09.06 |
카카오 프렌즈 컬러링북 (0) | 2021.09.03 |
직업군 추천하기 (0) | 2021.09.03 |
오픈채팅방 (0) | 2021.09.03 |