코딩하는 해달이

[level 1] 모의 고사 본문

개인 공부/프로그래머스

[level 1] 모의 고사

코딩하는 해달 2022. 8. 4. 21:36

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

문제 이해

1,2,3번이 찍는 방식의 패턴을 잘 보고 답과 비교해서 총 점수를 구해보자.

 

알고리즘

1. 정수 배열 answers를 입력받는다.

2. 1,2,3번 수포자가 찍는 패턴을 배열로 저장한다.

3. 1,2,3번 수포자가 찍는 패턴과 answers의 정답을 비교해서 각 점수를 구한다.

4. 각 점수를 비교해서 가장 높은 사람을 answer에 추가한다.

 

풀이코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> answers) {
	vector<int> people;
	vector<int> n1;
	vector<int> n2;
	vector<int> n3;
	int n2pn = 0;
	int n2pat[4] = { 1,3,4,5 };
	int n3pn = 0;
	int n3pat[10] = { 3,3,1,1,2,2,4,4,5,5 };
	int score[3] = { 0, };

	for (int i = 0; i <= answers.size(); i++) {
		n1.push_back(i % 5 + 1);

		if (i % 2 == 0) {
			n2.push_back(2);
		}
		else {
			n2.push_back(n2pat[n2pn % 4]);
			n2pn++;
		}

		n3.push_back(n3pat[n3pn%10]);
		n3pn++;
	}
	
	for (int i = 0; i < answers.size(); i++) {
		if (n1[i] == answers[i]) {
			score[0]++;
		}
		if (n2[i] == answers[i]) {
			score[1]++;
		}
		if (n3[i] == answers[i]) {
			score[2]++;
		}
	}

	int max = *max_element(score, score + 3);

	for (int i = 0; i < 3; i++) {
		if (score[i] == max) {
			people.push_back(i + 1);
		}
	}

	return people;
}

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

반응형

'개인 공부 > 프로그래머스' 카테고리의 다른 글

[level 1] 완주하지 못한 선수  (0) 2022.08.05
[level 1] K번째 수  (0) 2022.08.04
[level 1] 체육복  (0) 2022.08.02
[level 1] 실패율  (0) 2022.08.02
[level 1] 약수의 개수와 덧셈  (0) 2022.07.31
Comments