[프로그래머스/c++] Level1: 모의고사

somyeong·2022년 5월 2일
0

프로그래머스

목록 보기
4/14

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/42840

🌱 문제


🌱 풀이

  • 세개의 벡터에 각 수포자들의 찍는 패턴을 넣어놓고, 일일이 각 사람의 맞은 갯수를 카운트 해주었다.

맞힌 문제 카운트 하는 부분

  • 각 벡터의 size가 다르므로, 반복되는 패턴의 인덱스를 나타내려면 현재 포문의 인덱스 i를 각 벡터로 나눈 나머지값이 패턴의 인덱스가 된다.
   for(int i=0;i<answers.size(); i++){
        // 맞힌 문제 카운트
        if(v1[i%v1.size()]==answers[i])
            cnt1++;
        if(v2[i%v2.size()]==answers[i])
            cnt2++;
        if(v3[i%v3.size()]==answers[i])
            cnt3++;
   }
  • 처음에는 나머지 방식으로 안하고, i1, i2, i3을 선언해서 각각 벡터에 해당하는 인덱스를 카운트해주었는데, 나머지 방식을 이용하면 i하나로도 세명의 맞은 갯수를 카운트 할 수 있었다.

🌱 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;
int cnt1, cnt2, cnt3;

//수포자들의 찍는 패턴 초기화
vector<int> v1= {1,2,3,4,5}; //size:5
vector<int> v2={2,1,2,3,2,4,2,5}; //size:8
vector<int> v3={3,3,1,1,2,2,4,4,5,5};//size:10
int max_cnt=0;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    for(int i=0;i<answers.size(); i++){
     
        
        // 맞힌 문제 카운트
        if(v1[i%v1.size()]==answers[i])
            cnt1++;
        if(v2[i%v2.size()]==answers[i])
            cnt2++;
        if(v3[i%v3.size()]==answers[i])
            cnt3++;
    }
        
        //최댓값 찾기
        if(max_cnt<cnt1)
            max_cnt=cnt1;
        if(max_cnt<cnt2)
            max_cnt=cnt2;
        if(max_cnt<cnt3)
            max_cnt=cnt3;
    
        cout<<"영인 하이"<<"\n";
        //1번사람부터 확인하면 알아서 오름차순으로 들어간다.
        if(cnt1==max_cnt)
            answer.push_back(1);
        if(cnt2==max_cnt)
            answer.push_back(2);
        if(cnt3==max_cnt)
            answer.push_back(3);
    return answer;
}
profile
공부한 내용 잊어버리지 않게 기록하는 공간!

0개의 댓글