인프런 커뮤니티 질문&답변

유정현님의 프로필 이미지
유정현

작성한 질문수

자바 코딩테스트 - it 대기업 유제

3. "바둑대회" 코드 해설

바둑대회 질문입니당

작성

·

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

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

유정현님의 프로필 이미지
유정현

작성한 질문수

질문하기