-
[Programmers] 단체사진 찍기Algorithm/Programmers 2020. 12. 28. 23:46
[2017 카카오코드 본선] 단체사진 찍기
programmers.co.kr/learn/courses/30/lessons/1835#
Solution
- permutation으로 모든 캐릭터의 순서를 구한다음 조건에 맞는지 체크하는 방식으로 풀었다.
- 캐릭터의 위치를 저장하기 위해 알파벳을 idx로 하는 배열을 만들어 위치를 저장했는데 그렇게 할 필요없이 map으로 위치를 저장하는 방법도 있었다.
소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172import java.util.*;class Solution {static int[] kakaoFriends = {0, 'C' - 'A', 'F' - 'A', 'J' - 'A', 'M' - 'A', 'N' - 'A', 'R' - 'A', 'T' - 'A'};static int[] a;static boolean[] c;static String[] conditions;static int count;public static int solution(int n, String[] data) {int answer = 0;a = new int[kakaoFriends.length];c = new boolean[kakaoFriends.length];conditions = data;count = 0;permutation(0);answer = count;System.out.println(count);return answer;}private static void permutation(int len) {if (len == a.length) {int[] idx = new int[26];for (int i = 0; i < a.length; i++) {idx[kakaoFriends[i]] = a[i];}if (check(idx)) count++;return;}for (int i = 0; i < a.length; i++) {if (c[i]) continue;a[len] = i;c[i] = true;permutation(len + 1);c[i] = false;}}private static boolean check(int[] idx) {char A, B, C;int D;for (int i = 0; i < conditions.length; i++) {A = conditions[i].charAt(0);B = conditions[i].charAt(2);C = conditions[i].charAt(3);D = conditions[i].charAt(4) - '0';int distance = Math.abs(idx[A - 'A'] - idx[B - 'A']) - 1;if (C == '=') {if (distance != D) {return false;}} else if (C == '<') {if (distance >= D) {return false;}} else {if (distance <= D) {return false;}}}return true;}}cs 'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 호텔 방 배정 (0) 2020.09.02 [Programmers] 2020카카오공채 문자열 압축 (0) 2020.08.24 [Programmers] 카카오프렌즈 컬러링북 (0) 2020.06.16 [Programmers] 라면공장 (0) 2020.06.04 [Programmers] 괄호 변환 (0) 2020.06.02