바둑대회 조합 코드 작성질문드립니다.
301
작성한 질문수 27
조합으로 이렇게 작성했는데, 답이 다르게 나옵니다.
잘못 생각한 부분이 있을까요??
import java.util.*;
class Main {
public static boolean[] visit;
public static int answer;
public static int[] white,black;
public static int sum1,sum2,n;
public int solution(int[][] cans){
int answer = Integer.MAX_VALUE;
n=cans.length;
white = new int[n];
black = new int[n];
visit = new boolean[n];
int i=0;
for(int[] x : cans) { //흰색돌, 검정돌 분리해주기
white[i] = x[0];
black[i] = x[1];
i++;
}
dfs(0,0); //조합 탐색 시작
return answer;
}
public static void dfs(int L, int s) {
if(L==n/2) {
sum1=0;
sum2=0;
for(int i=0; i<n; i++) { //방문했던곳은 흰색 돌, 그렇지 않은 곳은 검은돌
if(visit[i]) sum1+=white[i]; //흰색돌들의 합
else sum2+=black[i]; //검정색 돌들의 합
}
answer = Math.min(answer, Math.abs(sum1-sum2));
}
else {
for(int i=s; i<n; i++) {
if(!visit[i]) {
visit[i] = true;
dfs(L+1, i+1);
visit[i] = false;
}
}
}
}
public static void main(String[] args){
Main T = new Main();
System.out.println(T.solution(new int[][]{{87, 84}, {66, 78}, {94, 94}, {93, 87}, {72, 92}, {78, 63}}));
System.out.println(T.solution(new int[][]{{10, 20}, {15, 25}, {35, 23}, {55, 20}}));
System.out.println(T.solution(new int[][]{{11, 27}, {16, 21}, {35, 21}, {52, 21}, {25, 33},{25, 32}, {37, 59}, {33, 47}}));
}
}
답변 2
0
안녕하세요, 인프런 AI 인턴이에요.
코드를 보면 answer 변수를 선언한 후 값이 초기화 되지 않은 상태에서 Math.min() 비교가 이루어지기 때문에 최종적인 결과값이 제대로 나오지 않습니다. dfs() 함수에서 모든 경우의 수를 탐색하는 과정 중에 탐색이 끝난 후에 answer 변수에 값을 대입해주어야 합니다.
따라서 dfs() 함수의 if(L==n/2) 블록 안쪽 마지막 부분에 answer = Math.min(answer, Math.abs(sum1-sum2)); 코드를 추가해주어야 합니다.
수정된 코드:
public static void dfs(int L, int s) {
if(L==n/2) {
sum1=0;
sum2=0;
for(int i=0; i; i++) { //방문했던곳은 흰색 돌, 그렇지 않은 곳은 검은돌
if(visit[i]) sum1+=white[i]; //흰색돌들의 합
else sum2+=black[i]; //검정색 돌들의 합
}
answer = Math.min(answer, Math.abs(sum1-sum2));
}
else {
for(int i=s; i<n; i++) {
if(!visit[i]) {
visit[i] = true;
dfs(L+1, i+1);
visit[i] = false;
}
}
}
}
비밀번호
0
65
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
161
2
cpu 스케줄링
0
105
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
117
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
96
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
124
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
155
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
248
1
"비밀번호" 문제 확인 부탁드립니다!
0
170
1
최대 길이 연속수열 질문
0
192
1
잃어버린 강아지 문제 count 관련 질문있습니다
0
202
1
바둑대회 질문입니당
0
221
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
310
1
알파코드 풀이질문입니다
0
216
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
162
1
혹시 이렇게 작성해도 괜찮나요?
0
284
2
문제풀이 확인 부탁드립니다.
0
243
1





