컴굥일지
[Programmers/프로그래머스][C++] 체육대회 (PCCP 모의고사 1회 2번) 본문
반응형
문제
https://school.programmers.co.kr/learn/courses/15008/lessons/121684?language=cpp
문제 내용
각 학생별로 체육 대회 특정 종목에 나갔을 때의 능력치를 담은 2차원 배열이 주어진다.
종목마다 1명의 학생이 나갈 수 있고, 각 학생은 1개의 종목에만 나갈 수 있다.
능력치의 합이 최대가 되는 경우를 구하면 된다.
문제 풀이
각 종목별로 누가 나갈지를 정해야 한다.
이는 백트래킹으로 쉽게 구할 수 있다.
코드
#include <string>
#include <vector>
using namespace std;
vector<int> studentOrder;
vector<int> used;
int ex_num;
int student;
int mmax=-1;
void decideStudent(int cnt, vector<vector<int>> &ability){
if(cnt==ex_num){
int ssum=0;
for(int i=0;i<cnt;i++){
ssum+=ability[studentOrder[i]][i];
}
mmax=max(mmax, ssum);
return;
}
for(int i=0;i<student;i++){
if(!used[i]){
used[i]=true;
studentOrder[cnt]=i;
decideStudent(cnt+1, ability);
used[i]=false;
}
}
}
int solution(vector<vector<int>> ability) {
ex_num=ability[0].size();
student=ability.size();
studentOrder.assign(ex_num, 0);
used.assign(student, 0);
decideStudent(0, ability);
return mmax;
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[Programmers/프로그래머스][C++] 실습용 로봇 (PCCP 모의고사 2회 1번) (0) | 2023.08.19 |
---|---|
[Programmers/프로그래머스][C++] 유전법칙 (PCCP 모의고사 1회 3번) (0) | 2023.08.19 |
[Programmers/프로그래머스][C++] 외톨이 알파벳 (PCCP 모의고사 1회 1번) (0) | 2023.08.19 |
[BOJ/백준 16234][C++] 인구 이동 (0) | 2023.08.17 |
[Programmers/프로그래머스 lv3][C++] 아이템 줍기 (0) | 2023.08.17 |
Comments