300x250
반응형
문제
아이디어
이번 문제는 여러가지 아이디어 없이 순열이라는 키워드만 가지고 풀 수 있는 문제였습니다.
카카오프렌즈들의 총 인원수는 8명이었기 때문에 순열을 이용해도 문제가 없었고 순열을 통해 배열된 값을 가지고 data의 조건에 맞는지 체크만 해주면 풀 수 있는 문제입니다.
아이디어를 정리하면 다음과 같습니다.
1. 카카오프렌즈들을 이용한 순열 구하기
2. data의 조건에 맞는지 확인
구현 코드 (Java)
class Solution {
static int res;
public int solution(int n, String[] data) {
res = 0;
String array[] = new String[]{"A", "C", "F", "J", "M", "N", "R", "T"};
makeP(array, 0, data);
return res;
}
public static void makeP(String array[], int n, String data[]) { // 순열
if(n >= array.length) {
boolean isPossible = true; // data의 조건에 모두 만족하는지 확인
for(int i=0; i<data.length; i++) {
String target = data[i];
String first_char = target.substring(0, 1); // 첫 번째 문자
String second_char = target.substring(2, 3); // 두 번째 문자
int length = Integer.valueOf(target.substring(4))+1; // 조건의 크기
int first_index = -1; // 첫 번째 문자 위치
int second_index = -1; // 두 번째 문자 위치
for(int j=0; j<array.length; j++) {
if(array[j].equals(first_char)) {
first_index = j;
}
if(array[j].equals(second_char)) {
second_index = j;
}
}
String condition = target.substring(3, 4); // 관계 조건
switch(condition) { // 조건 검사
case "=":
if(Math.abs(first_index - second_index) != length) {
isPossible = false;
}
break;
case ">":
if(Math.abs(first_index - second_index) <= length) {
isPossible = false;
}
break;
case "<":
if(Math.abs(first_index - second_index) >= length) {
isPossible = false;
}
break;
}
if(!isPossible) { // 하나라도 조건이 맞지 않다면 종료
break;
}
}
if(isPossible) {
res++;
}
return;
}
for(int a=n; a<array.length; a++) {
String temp = array[a];
array[a] = array[n];
array[n] = temp;
makeP(array, n+1, data);
temp = array[a];
array[a] = array[n];
array[n] = temp;
}
}
}
읽어주셔서 감사합니다.
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 문자열 압축 (0) | 2021.03.17 |
---|---|
[Programmers] 보행자 천국 (0) | 2021.03.14 |
[Programmers] 외벽 점검 (0) | 2021.03.12 |
[Programmers] 순위 검색 (0) | 2021.03.11 |
[Programmers] 합승 택시 요금 (0) | 2021.03.10 |
댓글