https://programmers.co.kr/learn/courses/30/lessons/1835
1. 유형
구현, 순열
2. 로직
- 순열 구하기
- 사람들끼리의 거리를 구한다
- data배열의 조건대로 내가 구한 순열이 만족한지 판단
각 사람들끼리 떨어진 거리는 String.indexOf를 사용해서 쉽게 구할수 있었다.
3. 코드
class Solution {
static char info[] = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
static int answer;
public int solution(int n, String[] data) {
answer = 0;
permutation(0, "", new boolean[8], data);
return answer;
}
static void permutation(int depth, String line, boolean visited[], String[] data){
if(depth == 8){
if(checkdata(line, data))
answer++;
return;
}
for(int i=0; i<8; i++){
if(!visited[i]){
visited[i] = true;
permutation(depth+1, line+info[i], visited, data);
visited[i] = false;
}
}
}
static boolean checkdata(String line, String[] datas){
for(String data: datas){
int index1 = line.indexOf(data.substring(0,1));
int index2 = line.indexOf(data.substring(2,3));
int num = data.charAt(4)-'0';
char cmd = data.charAt(3);
if(!checkcmd(Math.abs(index1-index2)-1, num, cmd)){
return false;
}
}
return true;
}
static boolean checkcmd(int len, int num, char cmd){
switch(cmd){
case '=':
if(len==num)
return true;
else
return false;
case '>':
if(len>num)
return true;
else
return false;
case '<':
if(len<num)
return true;
else
return false;
default:
return false;
}
}
}
/*
로직
1) 순열 perm(int depth, String line, int index)
2) data판단
*/
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - (Java) 경주로 건설 (0) | 2021.06.09 |
---|---|
프로그래머스 - (Java) 보석쇼핑 (0) | 2021.06.08 |
프로그래머스 - (Java)땅따먹기 (0) | 2021.06.07 |
프로그래머스 - (Java) 괄호 회전하기 (0) | 2021.06.06 |
프로그래머스 - (Java) 프렌즈4블록 (0) | 2021.06.06 |