문제
문제 풀이
나는 순열 함수를 따로 만들어서 모든 경우에 한해 조건 검사하고 맞는 경우에 answer값을 증가하여 답을 구했다.
char배열에 각 이름을 담아 인덱스 번호를 이용하여 순열 결과로 나온 숫자와 매칭하여 조건 검사를 했다.
근데 검사할 때마다 모든 조건에 대해 split하고 검사하는 거라 뭔가 썩 좋은 방법같지는 않다고 생각된다...
소스 코드
class Solution {
static int answer;
static int n;
static String[] datas;
static char[] name = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
public int solution(int N, String[] Datas) {
answer = 0;
n = N;
datas = Datas;
int[] line = {0,1,2,3,4,5,6,7};
int[] output = new int[8];
boolean[] visited = new boolean[8];
permutation(line, output, visited, 0, 8, 8);
return answer;
}
public boolean confirm(int[] output){
for(String data : datas){
char[] arr = data.toCharArray();
char a = arr[0];
char b = arr[2];
char operator = arr[3];
int distance = arr[4] - '0';
int count = 0;
boolean check = false;
//조건이 = 인 경우
if(operator == '='){
for(int i = 0; i < 8; i++){
if(check)
count++;
if(name[output[i]] == b || name[output[i]] == a) {
if(check)
check = false;
else
check = true;
}
}
if(count-1 != distance)
return false;
}
//조건이 > 인 경우
else if (operator == '>'){
for(int i = 0; i < 8; i++){
if(check)
count++;
if(name[output[i]] == b || name[output[i]] == a) {
if(check)
check = false;
else
check = true;
}
}
if(!(count-1 > distance))
return false;
}
//조건이 < 인 경우
else{
for(int i = 0; i < 8; i++){
if(check)
count++;
if(name[output[i]] == b || name[output[i]] == a) {
if(check)
check = false;
else
check = true;
}
}
if(!(count-1 < distance))
return false;
}
}
return true;
}
public void permutation(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) {
if(depth == r){
if(confirm(output))
answer++;
return;
}
for(int i = 0; i < n; i++){
if(visited[i] != true){
visited[i] = true;
output[depth] = arr[i];
permutation(arr, output, visited, depth+1, n, r);
output[depth] = 0;
visited[i] = false;
}
}
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 자바 (0) | 2022.04.25 |
---|---|
[프로그래머스] 자물쇠와 열쇠 자바 (0) | 2022.03.08 |
[프로그래머스] 등굣길 자바 (0) | 2022.01.11 |
[프로그래머스] 키패드 누르기(2020카카오 인턴십) 자바 (0) | 2021.11.25 |
[프로그래머스] 네트워크 자바 (0) | 2021.11.19 |