반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 플러터 동작
- 재귀
- linebreak
- 프리즈드
- 플러터
- Android
- Java
- 완전탐색
- dfs
- 자료구조
- 코틀린
- IOS
- 프로그래머스
- element tree
- Lazy
- 자바
- Widget Tree
- zwj
- Render object tree
- 비동기 처리
- 거리알고리즘
- flutter
- 싱글톤
- 초기화
- Singleton
- 앱아이콘 변경
- 알고리즘
- Kotlin
- dart
- 에러
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 단체사진 찍기(Programmers : 1835) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/1835
문제 이해하는데에 조금 어려움이 있었던 문제...
처음에는 String 정렬 쪽을 생각하며 한참을 고민하다가 존경하는 고수님의 풀이를 참고하여 문제를 풀 수 있었다.
정답은 DFS에 있었다. 각 프랜즈의 배치 + 검증 매소드를 통해 몇개 조합이 조건에 만족하는지 어렵지 않게 구할 수 있었다.
DFS 함수 안의 for문을 통해 각 프랜즈의 조합을 String으로 넘겨준다.
중복을 허용하지 않기 때문에 visited array를 사용하였으며, 모든 프랜즈가 포함된 상태일 때는 validator 메소드를 통해
모든 조건이 충족하는지 확인해주며 답을 구할 수 있었다.
class Solution {
boolean[] visited;
int answer = 0;
String[] names = {"A", "C", "F", "J", "M", "N", "R", "T"};
public int solution(int n, String[] data) {
visited = new boolean[names.length];
dfsSearch("", data);
return answer;
}
public void dfsSearch(String currentNames, String[] datas) {
if(currentNames.length() == names.length) {
if(checkCondition(currentNames, datas)) answer++;
return;
}
for(int i = 0; i < names.length; i++) {
if(!visited[i]) {
visited[i] = true;
String tempName = currentNames + names[i];
dfsSearch(tempName, datas);
visited[i] = false;
}
}
}
public boolean checkCondition(String currentNames, String[] datas) {
for(String data : datas) {
int positionA = currentNames.indexOf(data.charAt(0));
int positionB = currentNames.indexOf(data.charAt(2));
char operator = data.charAt(3);
int distance = data.charAt(4) - '0';
int actualDistance = Math.abs(positionA - positionB);
if(operator == '=') {
if(actualDistance != distance + 1) return false;
} else if (operator == '>') {
if(!(actualDistance > distance + 1)) return false;
} else if (operator == '<') {
if(!(actualDistance < distance + 1)) return false;
}
}
return true;
}
}
반응형
'Java > Java.algorithm' 카테고리의 다른 글
자바(JAVA) - 괄호 변환(Programmers : 12973) (0) | 2022.03.16 |
---|---|
자바(JAVA) - 메뉴 리뉴얼(Programmers : 72411) (0) | 2022.03.15 |
자바(JAVA) - 124 나라의 숫자(Programmers : 12899) (0) | 2022.03.13 |
자바(JAVA) - 짝지어 제거하기(Programmers : 12973) (0) | 2022.03.13 |
자바(JAVA) - 부분합(백준 : 1806) (1) | 2021.06.15 |
Comments