문제
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
문제 풀이
나는 순열 함수를 따로 만들어서 모든 경우에 한해 조건 검사하고 맞는 경우에 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 |