[Programmers/C++] 모의고사

2024. 8. 19. 18:46·🐸 Problem Solving/Programmers

 

문제

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.

 

제한 사항

 

 

 

 

 

입출력 예시

입출력 예시

 

입출력 예시

 

 

 


 

풀이 #1 | 구조체와 안정 정렬(stable_sort)을 이용한 풀이

  • 수포자들의 정보를 가진 구조체를 생성.
  • 채점 후 수포자들의 점수(score) 기준 내림차순으로 정렬하여, 배열의 처음부분에 몰려있는, 즉 최고점을 받은 수포자들만 추출하였다.
#include <vector>
#include <algorithm>
using namespace std;

struct Tester {
    int id;
    int score;
    vector<int> pattern;
};

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<Tester> testers = {
        {1, 0, {1, 2, 3, 4, 5}},
        {2, 0, {2, 1, 2, 3, 2, 4, 2, 5}},
        {3, 0, {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}}
    };
    
    /* 채점 */
    for(auto& tester : testers) {
        for (int i = 0; i < answers.size(); ++i) {
            int j = i % tester.pattern.size();
            if (answers[i] == tester.pattern[j])
                tester.score++;
        }
    }

    /* 정렬 */
    stable_sort(testers.begin(), testers.end(), [](Tester a, Tester b) {
        return a.score > b.score;
    });
    
    /* 가장 높은 점수를 받은 사람 추출 */
    int maxScore = testers[0].score;
    for(auto& tester : testers) {
        if (tester.score == maxScore) {
            answer.push_back(tester.id);
        }
        else if (tester.score < maxScore) {
            break;
        }
    }

    return answer;
}

 

 

 

풀이 #2 | max_element()로 비교

  • 이중 for문을 없애기 위해 새로 작성해본 풀이다.
  • max_element()를 이용해 최고점을 알아내고, 최고점은 받은 수포자를 추출함. 
    • 인덱스 + 1이 수포자 번호이다.
    • 예: score[0]은 0 + 1 이므로, 수포자1의 점수를 뜻한다.
    • 예: score[1]은 1 + 1 이므로, 수포자2의 점수를 뜻한다.
#include <algorithm>
#include <vector>
using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> score(3);
    vector<vector<int>> patterns = {{1, 2, 3, 4, 5},
                                    {2, 1, 2, 3, 2, 4, 2, 5},
                                    {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}};

    for(int i = 0; i < answers.size(); ++i) {
        if(answers[i] == patterns[0][i % patterns[0].size()]) score[0]++;
        if(answers[i] == patterns[1][i % patterns[1].size()]) score[1]++;
        if(answers[i] == patterns[2][i % patterns[2].size()]) score[2]++;
    }

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

    return answer;
}

 

 

 


저작자표시 비영리 변경금지 (새창열림)

'🐸 Problem Solving > Programmers' 카테고리의 다른 글

[Programmers/C++] [PCCP 기출문제] 2번 / 석유 시추  (0) 2024.08.22
[Programmers/C++] 소수 찾기  (0) 2024.08.19
[Programmers/C++] 가장 큰 수  (0) 2024.08.09
'🐸 Problem Solving/Programmers' 카테고리의 다른 글
  • [Programmers/C++] 뒤에 있는 큰 수 찾기
  • [Programmers/C++] [PCCP 기출문제] 2번 / 석유 시추
  • [Programmers/C++] 소수 찾기
  • [Programmers/C++] 가장 큰 수
Mojing_
Mojing_
매일 매일 경험치를 쌓는 모징이의 개발 블로그입니다 :) This is Mojing’s Dev Blog where she gain experience points every day. :)
  • Mojing_
    모징이의 개발 경험치
    Mojing_
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 👻 Unity (4)
        • 🔧 기능 구현 (0)
        • 💡 유니티 팁 (0)
        • 📘 Unity 노트 (1)
        • 🏗️ 디자인 패턴 (0)
        • 🎨 그래픽 & 렌더링 (0)
      • 💻 Programming (14)
        • C (3)
        • C++ (9)
        • C# (0)
        • Swift (2)
      • 💾 Computer Science (16)
        • Algorithm (9)
        • Software Engineering (7)
      • 🐸 Problem Solving (108)
        • Programmers (41)
        • BOJ (67)
      • 🔋 ETC (0)
      • 💡 Quest Log (0)
  • 인기 글

  • 공지사항

  • 태그

    BOJ
    DFS/BFS
    C++
    backtracking
    algorithm
    dynamic programming
    sort
    탐색
    프로그래머스
    티스토리챌린지
    CS
    Problem Solving
    programmers
    오블완
    Design Pattern
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Mojing_
[Programmers/C++] 모의고사
상단으로

티스토리툴바