📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
💡 접근
범위가 크지않아 순열 문제로 접근은 했으나 data에 따라서 걸러주는데에서 시간이 꽤나 걸렸다.
처음에는 순열을 뽑을 때 처음에는 인덱스 번호나 프렌즈의 이름을 넣어줬는데,
인덱스 번호나 프렌즈의 이름만으로는 각 프렌즈의 인덱스 번호를 찾기가 비효율적이라 맵을 사용했다.
맵에 프렌즈의 이름과 프렌즈의 번호를 넣어두고 data에 있는 프렌즈의 이름으로 맵에 있는 프렌즈의 인덱스 번호를 구해서 그 인덱스 번호로 현재 뽑은 순열의 인덱스 번호를 구해서 그 둘의 차를 구했다.
그리고 거리가 1일 때 인덱스의 차이가 1이 아닌데 그 부분에서도 시간이 소요됐다.
👩💻 코드
import java.util.*;
class Solution {
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static char[] c = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
static int[] arr;
static HashMap<Character, Integer> map;
static boolean[] visited;
static String[] clone;
static int answer;
public int solution(int n, String[] data) {
clone = data;
visited = new boolean[8];
arr = new int[8];
map = new HashMap<>();
answer = 0;
map.put('A',0);
map.put('C',1);
map.put('F',2);
map.put('J',3);
map.put('M',4);
map.put('N',5);
map.put('R',6);
map.put('T',7);
DFS(0);
System.out.println(answer);
return answer;
}
private void DFS(int L) {
if (L == 8) {
//8명을 세우는 경우의 수 중에서 data에 맞는 것만 뽑아내기
if(check()) answer++;
return;
} else {
for (int i = 0; i < 8; i++) {
if(!visited[i]) {
visited[i] = true;
arr[L] = i;
DFS(L + 1);
visited[i] = false;
}
}
}
}
private boolean check() {
//arr[0] = A , arr[1] = C , arr[2] = F
//data에 따라서 걸러주기
for(String s : clone) {
int a = arr[map.get(s.charAt(0))]; //N
int b = arr[map.get(s.charAt(2))]; //F
char op = s.charAt(3); //=
int num = s.charAt(4) - '0' + 1;//0
//차이가 num+1여야야함
if(op == '=') {
if(Math.abs(a-b) != num) return false;
}
//차이가 num 초과해야함 num 이하면 안됨
else if(op == '>') {
if(Math.abs(a-b) <= num) return false;
}
//차이가 num 미만이여야함 num 이상이면 안됨
else if(op == '<') {
if(Math.abs(a-b) >= num) return false;
}
}
return true;
}
public static void main(String[] args) {
Solution s = new Solution();
int n = 2;
String[] data = {"N~F=0", "R~T>2"};
//String[] data = {"M~C<2", "C~M>1"};
s.solution(n, data);
}
}
'Algorithm > programmers' 카테고리의 다른 글
더 맵게 (0) | 2022.02.24 |
---|---|
기능개발 (0) | 2022.02.24 |
[2017 카카오코드]카카오프렌즈 컬러링북 (0) | 2022.02.23 |
[2019 카카오 블라인드]오픈채팅방 (0) | 2022.02.23 |
[2022 카카오 블라인드]신고 결과 받기 (0) | 2022.02.22 |