반응형
42840번
코딩테스트 연습 - 모의고사 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
뭔가 공식이 있는 문제는 아니고, 코드를 얼마나 효율적으로 짜는지가 중요한 문제 같습니다.
- 풀이1
public int[] solution(int[] answers) {
// 수포자 패턴
int[][] supoja_pattern = {
{ 1, 2, 3, 4, 5 },
{ 2, 1, 2, 3, 2, 4, 2, 5 },
{ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
};
// 정답수 구하기
List<Integer> answerList = Arrays.asList(0, 0, 0);
for(int i=0; i<answerList.size(); i++) {
for(int j=0; j<answers.length; j++) {
if(supoja_pattern[i][j % supoja_pattern[i].length] == answers[j]) {
answerList.set(i, answerList.get(i)+1);
}
}
}
// 정답 최댓값 구하기
int max = Collections.max(answerList);
List<Integer> maxList = new ArrayList<Integer>();
for(int i=0; i<answerList.size(); i++) if(max == answerList.get(i)) maxList.add(i+1);
// 반환 타입에 맞춰서 반환하기 위해 최댓값 수포자들 배열에 담기
int[] answer = new int[maxList.size()];
for(int i=0; i<maxList.size(); i++) answer[i] = maxList.get(i);
return answer;
}
✅ 지문에 나온대로 각 수포자는 자신만의 찍는 패턴이 있습니다.
정답은 정해져 있으니 각 수포자의 패턴에 맞게 정답수를 찾아낼 수 있습니다.
✅ Collections.max()
리스트 내에서 최댓값을 찾습니다.
✔ 테스트 케이스 처리속도: 평균 0.1ms / 최대 2.19ms
- 풀이2
public int[] solution2(int[] answers) {
int supoja = 3;
int[][] supoja_pattern = {
{ 1, 2, 3, 4, 5 },
{ 2, 1, 2, 3, 2, 4, 2, 5 },
{ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
};
int[] answerAry = new int[supoja];
for(int i=0; i<answerAry.length; i++) {
for(int j=0; j<answers.length; j++) {
if(supoja_pattern[i][j % supoja_pattern[i].length] == answers[j]) {
answerAry[i]++;
}
}
}
int max = Arrays.stream(answerAry).max().getAsInt();
return IntStream.range(1, supoja+1).filter(i -> answerAry[i-1] == max).toArray();
}
사실 이거는 할 필요 없었는데 그냥 stream으로 풀어서 코드를 좀 줄여보고 싶었어요.
당연하지만 처리속도는 더 안 좋아집니다...^^
테스트 케이스 처리속도: 평균 3.5ms / 최대 8.32ms
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - K번째수 java :: 정렬 (0) | 2022.07.05 |
---|---|
프로그래머스 - 체육복 java :: 탐욕법(Greedy) :: 42862 (0) | 2022.07.05 |
프로그래머스 - 실패율 java :: 2019 KAKAO BLIND RECRUITMENT :: 42889 (0) | 2022.07.05 |
프로그래머스 - 폰켓몬 java :: 찾아라 프로그래밍 마에스터 (0) | 2022.07.04 |
프로그래머스 - 약수의 개수와 덧셈 java :: 월간 코드 챌린지 시즌2 :: 77884 (0) | 2022.07.04 |