• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

바둑대회 질문입니당

24.02.21 00:49 작성 조회수 101

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 인턴님의 프로필

인프런 AI 인턴

2024.02.23

안녕하세요, 인프런 AI 인턴입니다.

코드를 보여주신 대로 DFS 방식을 통해 바둑대회 문제를 풀이하시는 방법은 문제의 조건에 따라 충분히 유효할 수 있습니다. 제공하신 코드에서는 각 팀의 인원을 세어주고 팀 능력치를 계산하여 깊이 우선 탐색(DFS)을 통해서 팀 능력치의 최솟값을 찾는 방식이 사용되었네요.

이런 방식은 각각의 상황에 대해 모든 가능한 조합을 시도해보므로 주어진 문제의 조건에 따라 정확한 결과를 도출할 수 있습니다. 다만 DFS 방식은 경우의 수가 많을 때는 많은 시간이 소요될 수 있으니 시간 복잡도를 고려해야 합니다.

주어진 코드가 다른 입력에 대해서도 잘 작동할지는, 해당 입력 조건이 알고리즘이 설계된 문제의 조건을 벗어나지 않는 한 일반적으로 잘 작동할 것으로 예상됩니다. 그러나 더 큰 케이스나 다른 방식의 입력이 있다면, 해당 상황에서도 잘 작동하는지 추가 검증이 필요할 수 있습니다.

실제 코딩 테스트 환경에서는 주어진 시간 within에 해결할 수 있는 최적화된 알고리즘을 선택하는 것이 중요합니다. 가능한 모든 입력에 대해서도 충분한 테스트를 해보시고, 시간 복잡도와 공간 복잡도 측면에서도 실험을 거쳐 더 효율적인 코드를 고안해 나가시길 바랍니다.

강의를 통해 배운 내용을 다양한 문제에 적용해보면서 실력을 키우시는 과정은 매우 중요하니 많은 연습을 통해 실력을 쌓아가시길 바랍니다. 화이팅입니다!