문제
[프로그래머스] 모의고사
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
int student1[] = {1, 2, 3, 4, 5};
int student2[] = {2, 1, 2, 3, 2, 4, 2, 5};
int student3[] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
vector<int> count = {0, 0, 0};
for (int i = 0; i < answers.size(); i++) {
if (answers[i] == student1[i % 5])
count[0]++;
if (answers[i] == student2[i % 8])
count[1]++;
if (answers[i] == student3[i % 10])
count[2]++;
}
int max = *max_element(count.begin(), count.end());
for (int i = 0; i < 3; i++) {
if (max == count[i])
answer.push_back(i + 1);
}
return answer;
}
풀이
우선 각 학생별로 찍는 방법의 패턴부터 파악해야 한다.
1번 학생은 1, 2, 3, 4, 5
2번 학생은 2, 1, 2, 3, 2, 4, 2, 5
3번 학생은 3, 3, 1, 1, 2, 2, 4, 4, 5, 5
과 같은 찍기 패턴을 가진다
이후 주어진 answers
를 순회하면서 각 번호별로 몇 개를 맞춰야 하는지 세야 하는데,
찍기 패턴은 반복되기 때문에 answers
배열의 각 정답을 각 학생의 답안 패턴과 비교할 때, % 연산을 사용한다.
정답이 일치할 경우 해당 학생에 대해 점수를 count
에 증가시킨다.
이후 최대 점수를 찾기 위해 max_element
함수를 사용해 count
벡터의 최댓값을 max
에 저장한다.
마지막으로, count
의 값이 max
와 동일한 학생의 번호를 answer
에 추가하고 answer
를 반환해 종료한다.
🔎max_element
max_element
는 벡터에서 최대값의 주소를 반환한다. 따라서 값을 얻을 때는 *
로 값을 얻는다.
회고
- 패턴이 있는 값과 비교하기 위해 % 연산을 사용하는 것을 떠올리는 것이 가장 어려웠다.
- max_element는 주소값을 반환하는 것을 기억해두자
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 22일차 TIL + 힙(C++) (0) | 2024.11.19 |
---|---|
99클럽 코테 스터디 21일차 TIL + 힙(C++) (0) | 2024.11.17 |
99클럽 코테 스터디 19일차 TIL + 힙(C++) (0) | 2024.11.15 |
99클럽 코테 스터디 18일차 TIL + 큐(C++) (1) | 2024.11.14 |
99클럽 코테 스터디 17일차 TIL + 스택/큐(C++) (6) | 2024.11.14 |