250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 막내의막무가내 플러터 flutter
- 프로그래머스 알고리즘
- 막내의막무가내 SQL
- 막내의막무가내 코볼 COBOL
- 주택가 잠실새내
- 막내의막무가내 안드로이드
- 막무가내
- 2022년 6월 일상
- 막내의막무가내 코틀린
- 부스트코스에이스
- 막내의막무가내 일상
- Fragment
- 막내의 막무가내 알고리즘
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 목표 및 회고
- 막내의 막무가내
- 막내의막무가내 프로그래밍
- 주엽역 생활맥주
- flutter network call
- 프래그먼트
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 플러터
- 안드로이드 Sunflower 스터디
- 안드로이드 sunflower
- 막내의막무가내 rxjava
- 부스트코스
- 막내의막무가내 알고리즘
- 막내의막무가내
- 막내의막무가내 안드로이드 코틀린
- 안드로이드
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 단체사진 찍기 (2017 카카오코드 본선) -DFS- 자바 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/1835
프로그래머스 단체사진 찍기 문제를 풀어봤습니다. ㅎㅎ
8명의 카카오 프렌즈들이 사진을 찍는데 프렌즈의 규칙에 맞게 사진을 찍을 수 있는 경우의 수를 구하는 문제였습니다.
DFS로 완전탐색을 한 후 해당 순열이 조건을 만족하는 순열인지 구하는 방식으로 해결했습니다.
주석으로 추가 설명을 달아놨습니다.
풀이는 다음과 같습니다.
[Java]
class Solution {
private int answer = 0;
private String[] friends = {"A", "C", "F", "J", "M", "N", "R", "T"};
public int solution(int n, String[] data) {
boolean[] isVisited = new boolean[8];
dfs("", isVisited, data);
System.out.println(answer);
return answer;
}
private void dfs(String names, boolean[] isVisited, String[] datas) {
if (names.length() == 7) {
if (check(names, datas)) { // 조건만족 체크
answer++;
}
return;
}
for (int i = 0; i < 8; i++) { // 조합
if (!isVisited[i]) {
isVisited[i] = true;
String name = names + friends[i];
dfs(name, isVisited, datas);
isVisited[i] = false;
}
}
}
// 조건대로 섰는지 체크
private boolean check(String names, String[] datas) {
for (String data : datas) {
int position1 = names.indexOf(data.charAt(0)); // 프렌즈 포지션1
int position2 = names.indexOf(data.charAt(2)); // 프렌즈 포지션2
char op = data.charAt(3); // 수식
int index = data.charAt(4) -'0'; // 간격
if (op == '=') {
if (!(Math.abs(position1 - position2) == index+1)) return false; //둘 포지션 차이를 구하기 위해선 index+1 을 해야함에 주의
} else if (op == '>') {
if (!(Math.abs(position1 - position2) > index+1)) return false;
} else if (op == '<') {
if (!(Math.abs(position1 - position2) < index+1)) return false;
}
}
return true;
}
}
https://github.com/mtjin/algorithm_practice/commit/34b8d6243d0ad9f3ed01fa28c4613b6561855e8a
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!!
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 프로그래머스 거리두기 확인하기 (2021 카카오 채용연계형 인턴십) -BFS- 자바, 코틀린 (0) | 2021.07.25 |
---|---|
[알고리즘] 프로그래머스 메뉴 리뉴얼 (2021 KAKAO BLIND RECRUITMENT) -DFS- 자바 (2개 시간초과) (2) | 2021.07.06 |
[알고리즘] 프로그래머스 모의고사 -완전탐색- 자바, 코틀린 (0) | 2021.07.05 |
[알고리즘] 백준 2636 치즈 -BFS- 코틀린 (0) | 2021.07.03 |
[알고리즘] 백준 2661 좋은수열 -백트래킹- 코틀린 (4) | 2021.06.26 |
Comments