Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Java] 단체사진 찍기 본문
문제 풀이
문제를 보자마자 조합이구나가 떠오른게 많이 발전한 것 같다. 조금 어려웠던 점은 data에 주어지는 조건에 맞도록 어떻게 조합을 맞춰나가야 하는지가 잘 떠오르지 않았다. 그래서 가능한 조합을 모두 만든 다음, 그 조합이 data에 주어지는 조건에 부합하는지 확인하도록 했다. 또한 조건에 부합하는 조합이 없다면 0을 출력해야한다. answer를 0으로 초기화 해두고 모든 조건을 확인하고도 answer의 증가가 일어나지 않으면 조건에 맞는 것이 없는 것이다. 그대로 코드를 작성해서 통과할 수 있었다.
class Solution {
int answer = 0;
String[] friends = {"A", "C", "F", "J", "M", "N", "R", "T"};
public int solution(int n, String[] data) {
boolean[] visited = new boolean[8];
dfs("", visited, data);
return answer;
}
void dfs(String names, boolean[] visited, String[] datas) {
// name 길이가 7이 되면 검사 준비 완료
if (names.length() == 8) {
// 만들어진 names가 datas의 조건을 충족하는지 확인
if (check(names, datas)) {
answer++;
}
return;
}
for (int i = 0; i < 8; i++) {
if (!visited[i]) {
visited[i] = true;
String name = names + friends[i];
dfs(name, visited, datas);
visited[i] = false;
}
}
}
boolean check(String name, String[] datas) {
for (String data : datas) {
int pos1 = name.indexOf(data.charAt(0));
int pos2 = name.indexOf(data.charAt(2));
char op = data.charAt(3);
int index = data.charAt(4) - '0';
int dist = Math.abs(pos1 - pos2);
if (op == '=') {
if (!(dist == index + 1)) return false;
} else if (op == '<') {
if (!(dist < index + 1)) return false;
} else if (op == '>') {
if (!(dist > index + 1)) return false;
}
}
return true;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 조이스틱 (0) | 2023.04.28 |
---|---|
[Java] 주식가격 (0) | 2023.04.25 |
[Java] 2 x n 타일링 (0) | 2023.04.13 |
[Python] n^2 배열 자르기 (0) | 2021.12.15 |
[Python] 가장 긴 팰린드롬 (0) | 2021.09.09 |