developerU
[프로그래머스] level2 단체사진 찍기 (java) 본문
문제링크
https://programmers.co.kr/learn/courses/30/lessons/1835
풀이 방법
1. 순열을 이용
8가지 경우의 수를 모두 나열
2. 각각의 경우에서 조건이 맞는지 체크
* 시간 초과 주의 : 반대의 경우일 때 백트래킹 사용
내 코드
import java.util.*;
class Solution {
char[] friends = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
char[] res = new char[8];
int answer = 0;
int N;
String[] data;
public int solution(int n, String[] data) {
N = n;
this.data = data;
permu(0, 0);
return answer;
}
public void permu(int cnt, int flag){
if(cnt == 8){
if(check()) answer++;
return;
}
for(int i=0; i<8; i++){
if((flag & 1<<i) != 0) continue;
res[cnt] = friends[i];
permu(cnt+1, flag | 1<<i);
}
}
public boolean check(){
int start = 0;
int third = 0;
for(int i=0; i<N; i++){
for(int j=0; j<8; j++){
if(data[i].charAt(0) == res[j]) start = j;
if(data[i].charAt(2) == res[j]) third = j;
}
int cha = Math.abs(start-third)-1;
int num = data[i].charAt(4)-'0';
if(data[i].charAt(3) == '='){
if(cha != num) return false;
}
else if(data[i].charAt(3) == '<'){
if(cha >= num) return false;
}
else if(data[i].charAt(3) == '>'){
if(cha <= num) return false;
}
}
return true;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 명예의 전당 (java) (0) | 2022.11.28 |
---|---|
[프로그래머스] level2 두 큐 합 같게 만들기 (java) 시간초과 해결 (1) | 2022.09.03 |
[프로그래머스] level2 오픈채팅방 (java) (0) | 2022.05.04 |
[프로그래머스] level1 숫자 문자열과 영단어 (0) | 2022.03.24 |
[프로그래머스 Java] level2 짝지어 제거하기 (0) | 2021.04.22 |
Comments