[프로그래머스] 코딩테스트 LEVEL1 모의고사 C++

    반응형

    #INFO

    문제이름 : 모의고사

    난이도 : LEVEL1

    사용언어 : C++

    문제유형 : 완전탐색

    문제출처 : https://programmers.co.kr/learn/courses/30/lessons/42840

     

    코딩테스트 연습 - 모의고사

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

    programmers.co.kr


    #SOLVE

    우선 1번,2번,3번 수포자의 정답을 찍는 규칙을 전역으로 벡터에 담아준다.

    vector<int> stu1 = {1,2,3,4,5};
    vector<int> stu2 = {2,1,2,3,2,4,2,5};
    vector<int> stu3 = {3,3,1,1,2,2,4,4,5,5};

    정답을 리턴하기 위한 answer 벡터와, 수포자들의 스코어를 저장하기 위한 scores 벡터를 선언해 준다.

    vector<int> solution(vector<int> answers) {
    	vector<int> answer;	
    	vector<int> scores(3);
    	...
    	...
    	return answer;
    }

    벡터의 크기에 대한 정보가 없기에, answers.size() 만큼 반복문을 돌린다. 그리고 %나머지 연산을 이용해 각 수포자들의 맞춘 정답 개수를 scores 벡터에 저장해준다.

    	for (int i = 0 ; i < answers.size() ; ++i)
    	{
    		if (answers[i] == stu1[i % stu1.size()]) scores[0]++;
    		if (answers[i] == stu2[i % stu2.size()]) scores[1]++;
    		if (answers[i] == stu3[i % stu3.size()]) scores[2]++;
    	}

    Algorithm STL의 *max_element를 이용해 최댓값을 구하고, 반복을 돌려서 최댓값과 일치하는 점수를 가진 socres 벡터의 원소가 존재한다면 추가해준다.

    	int max = *max_element(scores.begin(), scores.end());
    	
    	for (int i = 0 ; i < scores.size(); ++i)
    	{
    		if (scores[i] == max) answer.push_back(i+1);
    	}

    #전체코드(C++)

    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    vector<int> stu1 = {1,2,3,4,5};
    vector<int> stu2 = {2,1,2,3,2,4,2,5};
    vector<int> stu3 = {3,3,1,1,2,2,4,4,5,5};
    
    vector<int> solution(vector<int> answers) {
    	vector<int> answer;	
    	vector<int> scores(3);
    	for (int i = 0 ; i < answers.size() ; ++i)
    	{
    		if (answers[i] == stu1[i % stu1.size()]) scores[0]++;
    		if (answers[i] == stu2[i % stu2.size()]) scores[1]++;
    		if (answers[i] == stu3[i % stu3.size()]) scores[2]++;
    	}
    	
    	int max = *max_element(scores.begin(), scores.end());
    	
    	for (int i = 0 ; i < scores.size(); ++i)
    	{
    		if (scores[i] == max) answer.push_back(i+1);
    	}
    
    	return answer;
    }
    
    // 1번 12345 
    // 2번 21232425 
    // 3번 3311224455

    반응형

    댓글

    Designed by JB FACTORY