반응형
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
- IOS
- microtask queue
- zwj
- Kotlin
- 싱글톤
- 코틀린
- Render object tree
- dfs
- 비동기 처리
- 완전탐색
- element tree
- flutter
- 플러터
- Event Loop
- 자료구조
- linebreak
- 프로그래머스
- 자바
- dart
- Java
- 거리알고리즘
- 플러터 동작
- 알고리즘
- 앱아이콘 변경
- Lazy
- 초기화
- Singleton
- 에러
- Android
- 재귀
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 단체사진 찍기(Programmers : 1835) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
문제 이해하는데에 조금 어려움이 있었던 문제...
처음에는 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