public class PccpTest1_2 {
// PCCP 모의고사 1회 2번 체육대회
static int answer = 0; // 최대값 담을 answer 변수
static boolean[] selectStudentNumArr; // 대표로 뽑힌 학생인지 확인을 위한 boolean 배열
static int studentCnt = 0; // 총 학생 수
static int sportsCnt = 0; // 총 종목 수
public static void dfs(int depth, int sum, int[][] ability) { // 종목 index, 합계 점수, 학생별 능력치가 담긴 배열
if (depth == sportsCnt) { // 세 번째 종목 점수까지 합산된 후라면
answer = Math.max(answer, sum); // 세 번째 종목 점수까지 합산된 결과 중 최대값을 answer 변수에 넣기
} else { // depth가 0, 1, 2인 경우
for (int i = 0; i < studentCnt; i++) { // 0 ~ 4
if (selectStudentNumArr[i] == false) { // 아직 선택되지 않은 학생이라면
selectStudentNumArr[i] = true; // 해당 학생 선택
dfs(depth + 1, sum + ability[i][depth], ability); // 해당 학생의 종목 중 index가 depth인 종목의 점수를 합계에 더하고, 다음 종목 확인을 위해 dfs
selectStudentNumArr[i] = false; // dfs 빠져나온 이후 해당 학생은 다시 선택 전 상태로
}
}
}
}
public static int solution(int[][] ability) {
selectStudentNumArr = new boolean[ability.length]; // {false, false, false, false, false}
studentCnt = ability.length; // 5
sportsCnt = ability[0].length; // 3
dfs(0, 0, ability); // 종목 index 0, 합계 점수 0, 학생별 능력치가 담긴 배열
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] ability = {{40, 10, 10}, {20, 5, 0}, {30, 30, 30}, {70, 0, 70}, {100, 100, 100}}; // 5명의 학생, 3개의 종목
System.out.println(solution(ability)); // 40(0, 0) + 100(4, 1) + 70(3, 2) // 210
}
}
프로그래머스 PCCP 모의고사 문제 풀이 Java
'Java > PCCP' 카테고리의 다른 글
[Java] PCCP 모의고사 1회 문제 풀이 정답 (0) | 2022.11.26 |
---|---|
[Java] PCCP 모의고사 1회 운영체제 (0) | 2022.11.26 |
[Java] PCCP 모의고사 1회 유전법칙 (0) | 2022.11.26 |
[Java] PCCP 모의고사 1회 외톨이 알파벳 (1) | 2022.11.26 |