프로그래머스 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;
}