알고리즘/프로그래머스 1단계
프로그래머스 - 전국 대회 선발 고사 - C++
게임만드는학생
2023. 8. 6. 11:29
https://school.programmers.co.kr/learn/courses/30/lessons/181851
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> rank, vector<bool> attendance) {
int answer = 0;
int min = rank.size();
int minId = -1;
int h = 10000;
for (int i = 0; i < 3; i++)
{
min = rank.size(); minId = -1;
for (int j = 0; j < rank.size(); j++)
{
if (attendance[j] && min >= rank[j])
{
min = rank[j];
minId = j;
}
}
attendance[minId] = false;
answer += (h * minId);
h /= 100;
}
return answer;
}
설명
rank 와 attendance 배열을 보며 참석할 수 있는 사람( true인 사람) 중 가장 등수가 높은 사람( rank[j] 의 수가 가장 작은사람) 을 골라내는 문제이다.
3등까지만 뽑기에 i for문 3번을 돌며 제일 높은 등수인 사람을 가려내고 그 등수의 사람을 false로 만들어서 문제를 해결했다.
먼저 j for문에서는 단순히 참석할 수 있는 여부의 사람 중 등수가 가장 높은 사람을 min 과 minId 에 저장하여
j for문이 끝나면 false로 바꾸고 answer에 더했다.
이렇게 3번 i for문을 돌면 자연스럽게 높은 등수부터 3명이 가려진다.