[프로그래머스 C++] 모의고사

2020. 9. 26. 21:14·알고리즘/Programmers

문제 정답의 배열이 주어지면 1번 수포자부터 3번 수포자까지 가장 많은 정답을 받은 사람을 answer 배열에 넣으면 된다.

수포자의 반복되는 패턴을 a, b, c 배열에 담아 answers 인덱스와 함께 돌려가면서 카운트를 올려주면 된다.

 

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

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> a = { 1,2,3,4,5 }, b = { 2,1,2,3,2,4,2,5 }, c = { 3,3,1,1,2,2,4,4,5,5 };
    vector<int> C(3);

    int ai = 0, bi = 0, ci = 0;
    for (auto i : answers) {
        if (i == a[ai++]) {
            C[0]++;
            if (ai == 5) ai = 0;
        }
        if (i == b[bi++]) {
            C[1]++;
            if (bi == 8) bi = 0;
        }
        if (i == c[ci++]) {
            C[2]++;
            if (ci == 10) ci = 0;
        }
    }
    int max_v = *max_element(C.begin(), C.end());

    for (int i = 0; i < 3; i++) {
        if (max_v == C[i]) {
            answer.push_back(i + 1);
        }
    }

    return answer;
}

 

처음엔 이렇게 적어줬는데 첫 예제 2개는 잘 맞고 그 이후로 제출하니 틀려서 고민해보니

ai, bi, ci 이런 식으로 하는 건 너무 위험한 접근법이었다.

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

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> a = { 1,2,3,4,5 }, b = { 2,1,2,3,2,4,2,5 }, c = { 3,3,1,1,2,2,4,4,5,5 };
    vector<int> C(3);
    
    for (int i = 0; i < answers.size(); i++) {
        if (answers[i] == a[i % 5]) C[0]++;
        if (answers[i] == b[i % 8]) C[1]++;
        if (answers[i] == c[i % 10]) C[2]++;
    }
    int max_v = *max_element(C.begin(), C.end());
    
    for (int i = 0; i < 3; i++) {
        if (max_v == C[i]) {
            answer.push_back(i + 1);
        }
    }
    
    return answer;
}

 

나머지 연산자를 사용하니 바로 맞았다...

나머지 연산자를 잘 기억해둬야겠다.

 

'알고리즘 > Programmers' 카테고리의 다른 글

[프로그래머스 C++] 카카오프렌즈 컬러링북  (0) 2020.09.28
[프로그래머스 C++] 소수 찾기  (0) 2020.09.27
[프로그래머스 C++] 완주하지 못한 선수  (0) 2020.09.26
[프로그래머스 C++] 두 개 뽑아서 더하기  (0) 2020.09.26
[프로그래머스 C++] 크레인 인형뽑기 게임  (0) 2020.09.26
'알고리즘/Programmers' 카테고리의 다른 글
  • [프로그래머스 C++] 소수 찾기
  • [프로그래머스 C++] 완주하지 못한 선수
  • [프로그래머스 C++] 두 개 뽑아서 더하기
  • [프로그래머스 C++] 크레인 인형뽑기 게임
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이분 탐색
    BOJ
    크루스칼
    프로그래머스
    dp
    냅색
    유니온 파인드
    BFS
    알고리즘
    이분탐색
    구현
    트리
    dfs
    GREEDY
    우선순위 큐
    완전 탐색
    행렬 제곱
    완전탐색
    팰린드롬
    피보나치 수
    SWEA
    MST
    조합
    큐
    다익스트라
    시뮬레이션
    분할 정복
    코딩테스트 연습
    소수
    피사노 주기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
[프로그래머스 C++] 모의고사
상단으로

티스토리툴바