새소식

알고리즘 문제풀이/프로그래머스

[프로그래머스(Programmers)] level1 모의고사 (완전탐색) c++, java 풀이

  • -

프로그래머스 level1 모의고사 문제 풀이입니다
c++, java로 풀었습니다

https://programmers.co.kr/learn/courses/30/lessons/42840

이 문제는 이해만 하면 쉽게 풀 수 있어요
첫 번째 사람은 5번마다 반복해서 찍고
두 번째 사람은 8번째
세 번째 사람은 10번째 마다 반복되는 숫자로 찍어요!!

그래서 % 연산을 통해 사람마다 총 몇개 맞추었는지 구합니다

일일이 끝까지 검색 즉, 완전탐색을 하면서 구해야되요

java 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        ArrayList<Integer> arrList = new ArrayList<>();

        int[] a = {1,2,3,4,5};
        int[] b = {2,1,2,3,2,4,2,5};
        int[] c = {3,3,1,1,2,2,4,4,5,5};
        int a_r = 0;
        int b_r = 0;
        int c_r = 0;

        // 1번 수포자: 12345 반복 5
        // 2번 수포자: 21232425 반복 8
        // 3번 수포자: 3311224455 반복 10

        for(int i=0; i < answers.length; i++){
            if(answers[i] == a[i % 5])
                a_r++;
            if(answers[i] == b[i % 8])
                b_r++;
            if(answers[i] == c[i % 10])
                c_r++;
        }

        int max = Math.max(a_r, Math.max(b_r, c_r));
        if(max == a_r){
            arrList.add(1);
        }
        if(max == b_r)
            arrList.add(2);
        if(max == c_r)
            arrList.add(3);

        int size = arrList.size();
        int[] answer = new int[size];

        for(int i =0; i<size; i++){
            answer[i] = arrList.get(i);
        }

        return answer;
    }
}

그리고 Math.max() 를 통해서 가장 큰 수를 구합니다
그리고 가장 큰 수와 각각 맞은 수를 비교하면서(첫 번째 사람부터)
arrayList에 넣어주면 동점자가 있어도 차례차례 들어가겠죠??
그리고 마지막으로 배열에 다시 넣어서 출력해주면 끝!!
자바의 max 함수만 알면 간단하게 풀 수 있는 문제에요

좀 더 간단한 cpp 풀이

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> ans;

    int size = answers.size();
    vector<int> ans1(size), ans2(size), ans3(size);
    int temp1[] = { 1,2,3,4,5 };
    int temp2[] = { 2,1,2,3,2,4,2,5 };
    int temp3[] = { 3,3,1,1,2,2,4,4,5,5 };

    int check1 = 0, check2 = 0, check3 = 0;
    for (int i = 0; i < size; i++) {
        int answer = answers[i];
        if (answer == temp1[i % 5]) check1++;
        if (answer == temp2[i % 8]) check2++;
        if (answer == temp3[i % 10]) check3++;
    }

    int big = max({check1, check2, check3});
    if (big == check1) {
        ans.push_back(1);
    }

    if (big == check2) {
        ans.push_back(2);
    }

    if (big == check3) {
        ans.push_back(3);
    }

    return ans;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.