본문 바로가기

프로그래머스

프로그래머스 - 모의고사

실패한 코드

class Solution {
public int[] solution(int[] answers) {
// int[] answers = {1,3,2,4,2};
int[] cnt = new int[3];
int[] answer = {};

int length = answers.length;

int[][] arr = new int[3][length];
int std;

int[] pattern1 = {1, 2, 3, 4, 5};
int[] pattern2 = {1, 3, 4, 5, 2};
int[] pattern3 = {3, 1, 2, 4, 5};

/**
* 수포자 3명 배열 초기화
*/
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
for (int j = 0; j < arr[i].length; j++) {
std = j % 5;
arr[i][j] = pattern1[std];
// System.out.println(arr[i][j]);
}
} else if (i == 1) {
for (int j = 0; j < arr[i].length; j++) {
if (j % 2 == 0) {
arr[i][j] = 2;
} else {
std = ((j - 1) / 2) % 5;
arr[i][j] = pattern2[std];
}
// System.out.println(arr[i][j]);
}
} else {
for (int j = 0; j < arr[i].length; j++) {
std = j / 2;
arr[i][j] = pattern3[std];
// System.out.println(arr[i][j]);
}
}
}

/**
* 정답률 비교
*/
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (answers[j] == arr[i][j]) {
cnt[i]++;
}
}
}

/**
* 결과 출력
*/
int max = cnt[0];
int[] maxCnt = new int[3];
int[] saveIdx = new int[3];
int answerSize = 0;

for (int i = 0 ; i < 3; i++) {
if (cnt[i] > max) {
max = cnt[i];
}
}

for (int i = 0; i < 3; i++) {
if (max == cnt[i]) {
saveIdx[i] = i;
answerSize++;
}
}

answer = new int[answerSize];

for (int i = 0; i < answer.length; i++) {
answer[i] = saveIdx[i] + 1;
}

return answer;
}
}

--> 일단 너무 긴데,, 결국 중요한 건 각 수포자의 맞춘 갯수



고친 코드 -> 결과값을 담은 배열을 동적으로 사용하기 위해서

ArrayList를 사용했지만,


for (int num: list)로 꺼내올 때 순서보장이 안되어 그냥 Queue를 사용했다.


-----> 꺼내올때 순서보장이 된다. 애초에 데이터를 넣을 때 잘못 들어간 것 같다.


import java.util.LinkedList;
import java.util.Queue;

class Solution {
public int[] solution(int[] answers) {
int[] answer = {};

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}
};

int[] answerCnt = new int[patterns.length];
int std;

for (int i = 0; i < patterns.length; i++) {
for (int j = 0; j < answers.length; j++) {
std = j % patterns[i].length;

if (patterns[i][std] == answers[j]) {
answerCnt[i]++;
}
}
}

int max = Math.max(answerCnt[0], Math.max(answerCnt[1], answerCnt[2]));
/**
* 동적인 배열 ArrayList 사용하려 했으나,,
* 순서보장이 안되어 Queue 사용
*/
Queue<Integer> queue = new LinkedList<>();


for (int i = 0; i < patterns.length; i++) {
if (max == answerCnt[i]) {
((LinkedList<Integer>) queue).add(i + 1);
}

}

answer = new int[queue.size()];
int idx = 0;

int i = 0;
while (queue.size() > 0) {
answer[i] = ((LinkedList<Integer>) queue).pop();
System.out.println(answer[i]);
i++;
}
return answer;
}
}