작성
·
172
0
안녕하세요! 강의 잘 듣고있습니다!
바둑대회 문제 관련해서 제가 풀어낸 방식은 흑돌팀과 백돌팀 각각 인원을 세어주는 배열과 팀능력치를 계산하는 배열 두 개를 선언하고, 깊이가 다 다랐을 때 정답을 계속해서 초기화하는 방식을 사용했습니다. 예제 코드에서는 문제가 따로 생기진 않았는데 혹시 이런 방식의 풀이도 다른 문제를 접근하는게 큰 문제가 없을지 그리고 다른 입력에도 문제가 없을지 궁금합니다.
package DFS;
package DFS;
import java.util.*;
public class 바둑대회 {
}
class Solution6 {
static int[] sum;
static int[] teamCount;
static int[][] cansArr;
static int minNumber;
static ArrayList<Integer>[] list;
public static int solution(int[][] cans){
int answer;
sum = new int[2];
teamCount = new int[2];
cansArr = cans;
minNumber = Integer.MAX_VALUE;
list = new ArrayList[2];
for (int i = 0; i < list.length; i++) {
list[i] = new ArrayList<>();
}
DFS(0);
answer = minNumber;
return answer;
}
public static void DFS(int lv){
if(lv == cansArr.length){
if(Math.abs(sum[0] - sum[1]) < minNumber){
minNumber = Math.abs(sum[0] - sum[1]);
}
return;
}
for (int i = 0; i < 2; i++){
if( teamCount[i] < cansArr.length/2 ){
sum[i] += cansArr[lv][i];
teamCount[i]++;
DFS(lv+1);
sum[i] -= cansArr[lv][i];
teamCount[i]--;
}
}
}
public static void main(String[] args){
Solution6 T = new Solution6();
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}}));
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
코드를 보여주신 대로 DFS 방식을 통해 바둑대회 문제를 풀이하시는 방법은 문제의 조건에 따라 충분히 유효할 수 있습니다. 제공하신 코드에서는 각 팀의 인원을 세어주고 팀 능력치를 계산하여 깊이 우선 탐색(DFS)을 통해서 팀 능력치의 최솟값을 찾는 방식이 사용되었네요.
이런 방식은 각각의 상황에 대해 모든 가능한 조합을 시도해보므로 주어진 문제의 조건에 따라 정확한 결과를 도출할 수 있습니다. 다만 DFS 방식은 경우의 수가 많을 때는 많은 시간이 소요될 수 있으니 시간 복잡도를 고려해야 합니다.
주어진 코드가 다른 입력에 대해서도 잘 작동할지는, 해당 입력 조건이 알고리즘이 설계된 문제의 조건을 벗어나지 않는 한 일반적으로 잘 작동할 것으로 예상됩니다. 그러나 더 큰 케이스나 다른 방식의 입력이 있다면, 해당 상황에서도 잘 작동하는지 추가 검증이 필요할 수 있습니다.
실제 코딩 테스트 환경에서는 주어진 시간 within에 해결할 수 있는 최적화된 알고리즘을 선택하는 것이 중요합니다. 가능한 모든 입력에 대해서도 충분한 테스트를 해보시고, 시간 복잡도와 공간 복잡도 측면에서도 실험을 거쳐 더 효율적인 코드를 고안해 나가시길 바랍니다.
강의를 통해 배운 내용을 다양한 문제에 적용해보면서 실력을 키우시는 과정은 매우 중요하니 많은 연습을 통해 실력을 쌓아가시길 바랍니다. 화이팅입니다!