프로그래머스 모의고사 - C++Algorithm/PS2024. 11. 16. 14:53
Table of Contents
문제
풀이
카테고리에도 나와있듯이 완전탐색을 하면 되는 문제다.
다른 무언가가 더 있나 생각을 해봤지만, 총 들어오는 입력은 최대 40000개이며 비교하는 횟수도 최대 30000회이기 때문에 총 연산이 억 단위에 미치지 못한다.
(값을 올리고 내리는 것까지 포함해도 역시나 코드 상에 있는 연산 횟수가 억 단위에는 절대 도달하지 못한다.)
그렇기에 하나하나 대조해가며 카운팅을 해주면 된다.
출력이 고민할 거리
오히려 이 문제는 출력에서 고민을 많이 했다.
가장 높은 점수를 받은 사람의 숫자가 아니라 번호를 출력해야하고, 여러명일 경우 오름차 순으로 출력해야한다.
3명 밖에 없긴 하지만 3명의 값을 단순 비교를 하여 벡터에 넣어주자니 총 6개의 scope를 가진 if문을 만들어야 하여 많이 고민했다.
"어떻게 해야 최대한 깔끔하게 넣을 수 있을까?"
그리고 고민 끝에 나온 결론은 최댓값을 구하고 그 값과 비교시켜 넣는 것.
이러면 각각의 값들에 대해서면 비교하면 되고 3명의 값을 서로 비교하지 않아도 된다. ▼
/*최대값을 구해준 뒤*/
int maxCount = max({firstCount, secondCount, thirdCount});
/*순서대로 최대값과 맞는 지 비교하고 각자의 번호를 push_back을 해준다.*/
if (firstCount == maxCount) answer.push_back(1);
if (secondCount == maxCount) answer.push_back(2);
if (thirdCount == maxCount) answer.push_back(3);
C++ 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
int first[5] = {1, 2, 3, 4, 5};
int second[8] = {2, 1, 2, 3, 2, 4, 2, 5};
int third[10] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int firstCount = 0;
int secondCount = 0;
int thirdCount= 0;
for (int i = 0; i < answers.size(); i++) {
if (answers[i] == first[i % 5]) firstCount++;
if (answers[i] == second[i % 8]) secondCount++;
if (answers[i] == third[i % 10]) thirdCount++;
}
int maxCount = max({firstCount, secondCount, thirdCount});
if (firstCount == maxCount) answer.push_back(1);
if (secondCount == maxCount) answer.push_back(2);
if (thirdCount == maxCount) answer.push_back(3);
return answer;
}
'Algorithm > PS' 카테고리의 다른 글
프로그래머스 피로도 - C++ (0) | 2024.11.18 |
---|---|
프로그래머스 카펫 - C++ (0) | 2024.11.17 |
백준 1374번 강의실 - C++ (0) | 2024.11.15 |
백준 2212번 센서 - C++ (0) | 2024.11.14 |
백준 2579번 계단 오르기 - SWIFT (0) | 2024.11.14 |
@노근 :: NOGUEN 블로그