https://school.programmers.co.kr/learn/courses/30/lessons/42890
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이문제를 푸는데 dfs를 이용하려 했다 그러나
그래서 기존 코드를 가져왔는데 뜻대로 작동하지 않았다
예를들어 1234 이면 기존 내가 터득한 dfs는
1234 1243이 별개이다 그러나 이문제는 1234 1243을
같은걸로 봐야했다 그래서 gpt에게 물어보니 내가 배워왔던 dfs는
순열이고 조합은 다른거라고 했다 그래서 코드로 익히니
public static void dfs(boolean[] visited, int[] selectedCols,int start) {
System.out.println(Arrays.toString(visited));
for (int i = start; i < visited.length; i++) {
if (!visited[i]) {
visited[i] = true;
System.out.println("자식 시작: " + i);
dfs(visited, selectedCols,i+1);
visited[i] = false;
System.out.println("백트래킹: " + i+Arrays.toString(visited));
}
}
}
저 내부 for문에 start를 할당량을 해줘야 한다고 한다.
gpt 고맙다 코테에서 제일 어려운게 반복을 해야하는데 for문 개수가
정해져 있지 않을때 인데 순열과 조합을 잘외워서 적절하게 써야겠다
*9월15일 추가*
일반적인 조합 DFS 방식이면 visited 없어도 돼.
start 인덱스를 넘겨서 앞으로만 선택하게 만들면 중복 선택을 막을 수 있어.
즉 예제 소스의 visited는 필요없다
근데 그래도 어렵다 문제가 다시 풀어봐야겠다
'코테 > lvl2' 카테고리의 다른 글
| 프로그래머스 메뉴 리뉴얼(lvl2) 풀어보기 (0) | 2026.09.15 |
|---|---|
| 프로그래머스 후보키(lvl2)풀어보기 (0) | 2026.09.15 |
| 프로그래머스 오픈채팅방(lvl2) 풀어보기 (0) | 2026.09.14 |
| 프로그래머스 캐시(lvl2) 풀어보기 (0) | 2026.09.14 |
| 프로그래머스 방금그곡(lvl2) 풀어보기 (0) | 2026.09.14 |