반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | public class SampleTest { public static void main(String[] args) { int[] answer = {}; int[] answers = {1,2,3,4,5}; 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[] count = {0,0,0}; int j = 0; int loopA = a.length; int loopB = b.length; int loopC = c.length; int aIdx, bIdx, cIdx; answer = new int[3]; for(int i = 0; i < answers.length; i++) { if(i > a.length) { aIdx = i % loopA; if(a[aIdx] == answers[i]) { count[0]++; } } else { if(a[i] == answers[i]) { count[0]++; } } if(i > b.length) { bIdx = i % loopB; if(b[bIdx] == answers[i]) { count[1]++; } } else { if(b[i] == answers[i]) { count[1]++; } } if(i > c.length) { cIdx = i % loopC; if(c[cIdx] == answers[i]) { count[2]++; } } else { if(c[i] == answers[i]) { count[2]++; } } } int max = 0; for(int i = 0 ; i <count.length; i++) { if(max < count[i]) { max = count[i]; } } int arrCnt = -1; for(int i = 0 ; i < count.length; i++) { if(max == count[i]) { answer[i] = i+1; arrCnt++; } } System.out.println("al : " + arrCnt); int[] tmp = new int[arrCnt+1]; for(int i = 0 ; i < arrCnt+1; i++) { tmp[i] = answer[i]; } //System.out.println(); answer = tmp; for(int i = 0 ; i < answer.length; i++) { System.out.println(answer[i]); } } } | cs |
문제를 풀 때 그냥 문제가 원하는 대로 해야한다. 수포자 3명의 규칙에 대한 값을 그냥 상수로 넣어도 되는데 범용적인 경우를 생각하려다보니까 각 길이마다 변수를 주고 이용하려고 하였다. 채점 도중 시간만 오버되는 문제가 발생한다.
이런 문제들은 답이 빨리 나와야 하기 때문에 복잡하게 할 필요가 없었다.
문제점 : 배열을 처음에 초기화하고 나중에 길이를 줄이려고 임시 배열을 만들고 복사하는 형태로 옮겼다. 하지만 이럴 필요없이 ArrayList에 답을 담은 후 나중에 답을 넣을 배열의 길이를 ArrayList의 길이 만큼 잡아 주면 되는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import java.util.*; class Solution { public int[] solution(int[] answers) { int[] answer = {}; ArrayList<Integer> temp = 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[] count = {0,0,0}; for(int i = 0 ; i < answers.length; i++) { if(answers[i] == a[i % 5]) { count[0] += 1; } if(answers[i] == b[i % 8]) { count[1] += 1; } if(answers[i] == c[i % 10]) { count[2] += 1; } } int max = count[0]; for(int i = 0; i < count.length; i++) { if(max < count[i]) { max = count[i]; } } for(int i = 0; i < count.length; i++) { if(count[i] == max) { temp.add(i+1); } } answer = new int[temp.size()]; for(int i = 0; i < temp.size(); i++) { answer[i] = temp.get(i); } Arrays.sort(answer); return answer; } } | cs |
반응형
'프로그래밍 > Algorithm' 카테고리의 다른 글
[백준] 11052번 카드 구매하기 (0) | 2019.01.11 |
---|---|
[백준 알고리즘] 2156 - 포도주 시식 (0) | 2018.11.19 |
[프로그래머스] K번째 수 (0) | 2018.10.21 |
[프로그래머스] 완주하지 못한 선수 (0) | 2018.10.21 |
[알고리즘] 알고리즘 수업내용정리 (0) | 2018.09.10 |