실패한 코드
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;
}
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 문자열 다루기 기본 (0) | 2019.01.08 |
---|---|
프로그래머스 - K번째수 (0) | 2019.01.08 |
프로그래머스 - 짝수와 홀수 (0) | 2019.01.07 |
프로그래머스 - 수박수박수박수박수박수? (0) | 2019.01.07 |
프로그래머스 서울에서 김서방 찾기 (0) | 2019.01.07 |