티스토리 뷰

< 해설 >

1,2,3 번 수포자가 찍는 방식 때문에 코드의 길이가 길어진 문제이다. 

수포자 1번은 그냥 12345 12345 로 찍기 때문에 i%5 로 간단히 풀 수 있지만 

수포자 2번은 21 23 24 25 21 23 24 25

수포자 3번은 33 11 22 44 55 33 11 22 44 55 

의 순으로 가기때문에 조건 체크를 한번씩 더 해줬어야했다.

 

2번은 i 가 0 부터 시작하므로 i & 1 이 false라면 무조건 2를 넣어주었고 true 라면 i % 8을 해서 나온 나머지를 switch 문으로 분기를 나누어줬다.

3번또한 i%10 을 한 값에 / 2 를 하여 나온 값들을 가지고 switch 문으로 i 별 학생의 정답을 구했다.

 

< 문제 >

 

< 풀이 >

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

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    
    int student1 = 0;
    int student2 = 0;
    int student3 = 0;
    
    for(int i =0; i < answers.size(); i++)
    {
        // 1번 학생
        int stu1Answer = i % 5;
        stu1Answer += 1;
        if(stu1Answer == answers[i])
            student1++;
        
        // 2번 학생
        int stu2Answer;
        if(!(i & 1)) // i & 1가 1이 아니면 수포자의 답은 2
            stu2Answer = 2;
        else
        {
            switch (i % 8)
            {
                case 1:
                    stu2Answer = 1;
                    break;
                case 3:
                    stu2Answer = 3;
                    break;
                case 5:
                    stu2Answer = 4;
                    break;
                case 7:
                    stu2Answer = 5;
                    break;
            }
        }
        if(stu2Answer == answers[i])
            student2++;
        
        // 3번 학생
        int stu3Answer;       
        switch ((i % 10) / 2)
        {
        case 0:
            stu3Answer = 3;
            break;
        case 1:
            stu3Answer = 1;
            break;
        case 2:
            stu3Answer = 2;
            break;
        case 3:
            stu3Answer = 4;
            break;
        case 4:
            stu3Answer = 5;
            break;
        }
        if (stu3Answer == answers[i])
            student3++;
    }
    
    int maxStudent = max(student1, student2);
    maxStudent = max(maxStudent, student3);
    
    if(maxStudent == student1)
        answer.push_back(1);
    if(maxStudent == student2)
        answer.push_back(2);
    if(maxStudent == student3)
        answer.push_back(3);
    
    return answer;
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함