developerU
[프로그래머스] level2 단체사진 찍기 (java) 본문
문제링크
https://programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
풀이 방법
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