코딩테스트/프로그래머스

PCCP 모의고사 1회 - 체육대회

feel2 2023. 2. 18. 10:02
반응형

1. 문제 정의

2. 문제 접근

한명에 한 능력치씩 골라 능력치의 최대 합산을 구하는 완전탐색으로 풀면 될 것 같다.

3. 문제 풀이

  1. dfs를 정의한다.
  2. 원하는 횟수만큼 반복할때 마다 정답을 갱신한다.
  3. dfs가 끝나고 정답을 출력한다.

4. 코드

import java.util.*;

class Solution {
    static int answer = 0;
    static int number_student, number_evnet;
    static boolean[] check_student;

    public void dfs(int k,int sum, int[][] ability) {

        if(k == number_evnet){
             answer = Math.max(answer, sum);
        } else {

            for(int i = 0; i < number_student; i++) {
                if(!check_student[i]) {
                    check_student[i] = true;
                     dfs(k+1, sum + ability[i][k], ability);
                    check_student[i] = false;
                }
            }
        }

    }

    public int solution(int[][] ability) {

        check_student = new boolean[ability.length];
        number_student = ability.length;
        number_evnet = ability[0].length;
        dfs(0, 0, ability); 

        return answer;
    }
}

5. 회고

반복횟수와 몇번째 종목인지 선택하는 인덱스 변수 값이 같은 값으로 해야한다는것을 늦게 깨달았다. 완전 탐색 관련 문제는 정형화 된 틀이 있지만 많이 풀어봐야 겠다.

반응형