일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 주엽역 생활맥주
- 막내의 막무가내
- 막내의막무가내 알고리즘
- 막내의막무가내 SQL
- flutter network call
- 막내의막무가내 일상
- 프로그래머스 알고리즘
- 막내의막무가내
- 부스트코스
- 막내의막무가내 rxjava
- 안드로이드
- 막내의막무가내 코틀린 안드로이드
- 막무가내
- 막내의막무가내 플러터
- 프래그먼트
- 2022년 6월 일상
- 주택가 잠실새내
- Fragment
- 막내의막무가내 목표 및 회고
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 안드로이드
- 막내의막무가내 안드로이드 코틀린
- 부스트코스에이스
- 안드로이드 Sunflower 스터디
- 막내의막무가내 프로그래밍
- 막내의막무가내 플러터 flutter
- 안드로이드 sunflower
- 막내의막무가내 코틀린
- 막내의막무가내 코볼 COBOL
- 막내의 막무가내 알고리즘
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 단체사진 찍기 (2017 카카오코드 본선) -DFS- 자바 본문
https://programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr

프로그래머스 단체사진 찍기 문제를 풀어봤습니다. ㅎㅎ
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
프로그래머스 단체사진 찍기 풀이 · mtjin/algorithm_practice@34b8d62
Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Showing 1 changed file with 46 additions and 0 deletions. +46 −0 프로그래머스 단체사진 찍기 (2017 카카오코드 본
github.com

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!!
'알고리즘 > 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 |