GitHubSeob
C++ / 프로그래머스 / 모의고사 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
문제풀이
수포자 1, 2, 3의 벡터를 선언한다.
벡터 answer의 크기만큼 반복문을 돌린다.
수포자 1은 [1, 2, 3, 4, 5]로 5개의 원소가 반복,
수포자 2는 [2, 1, 2, 3, 2, 4, 2, 5]로 8개의 원소가 반복,
수포자 3은 [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]로 10개의 원소가 반복된다.
따라서 수포자 1은 i%5를 하여 arr1[0], arr[1], ... , arr[4]가 반복하고 다른 수포자도 원소수만큼 반복하게 한다.
그러면서 cnt배열의 각 위치에 +1씩 해주어 일치하는 답이 몇 개인지 저장한다.
반복문이 종료되면 수포자들 중 최댓값을 찾고, 해당 최댓값이 누구의 정답인지 찾는다.
정답은 오름차순이므로 수포자 1부터 2, 3 순으로 찾는다.
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> arr1 = { 1,2,3,4,5 };
vector<int> arr2 = { 2,1,2,3,2,4,2,5 };
vector<int> arr3 = { 3,3,1,1,2,2,4,4,5,5 };
vector<int> cnt(3, 0);
int i = 0;
int max_cnt = 0;
for (i = 0; i < answers.size(); ++i) {
if (arr1[i % 5] == answers[i]) cnt[0]++;
if (arr2[i % 8] == answers[i]) cnt[1]++;
if (arr3[i % 10] == answers[i]) cnt[2]++;
}
for (i = 0; i < 3; ++i) max_cnt = max(max_cnt, cnt[i]);
if (max_cnt == cnt[0]) answer.push_back(1);
if (max_cnt == cnt[1]) answer.push_back(2);
if (max_cnt == cnt[2]) answer.push_back(3);
return answer;
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 크레인 인형뽑기 게임 (0) | 2021.08.08 |
---|---|
C++ / 프로그래머스 / 음양 더하기 (0) | 2021.08.08 |
C++ / 프로그래머스 / 체육복 (0) | 2021.08.04 |
C++ / 프로그래머스 / 로또의 최고 순위와 최저 순위 (0) | 2021.08.04 |
C++ / 프로그래머스 / 행렬의 덧셈 (0) | 2021.08.04 |