https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
풀이는 dp처럼 최대 문제수만큼
수포자 3인방의 정답지를 만들어 놓고, 답지와 비교하는 방식으로
굳이 이렇게 안 풀어도 됐을 거 같긴 한데..
다른 분들 풀이를 보니
찍는 방식 패턴을 반복 지점까지 배열로 선언해서 채점하는 방법을 썼다.
짧고 좋은 듯.
내 풀이
import java.util.ArrayList;
public class Solution {
static int MAX = 10000;
public int[] solution(int[] answers) {
int[] apply1 = new int[MAX];
int[] apply2 = new int[MAX];
int[] apply3 = new int[MAX];
int[] apply2Pattern = {1,3,4,5};
int[] apply3Pattern = {3,1,2,4,5};
int[] answer = {0,0,0};
for(int i=0; i < MAX; i++){
apply1[i] = (i%5)+1;
if(i%2 ==0){
apply2[i] = 2;
apply3[i] = apply3Pattern[(i/2)%5];
}else{
int num2 = ((i-1)/2)%4;
int num3 = ((i-1)/2)%5;
apply2[i] = apply2Pattern[num2];
apply3[i] = apply3Pattern[num3];
}
}
for(int i=0; i<answers.length; i++){
if(answers[i] == apply1[i]) answer[0]++;
if(answers[i] == apply2[i]) answer[1]++;
if(answers[i] == apply3[i]) answer[2]++;
}
int maxAnswerCnt = Math.max(Math.max(answer[0], answer[1]), answer[2]);
ArrayList<Integer> resultArray = new ArrayList<>();
for (int i=0; i < 3; i++){
if(answer[i] == maxAnswerCnt) {
resultArray.add(i+1);
}
}
int[] result = new int[resultArray.size()];
for(int i=0; i< resultArray.size(); i++){
result[i] = resultArray.get(i);
}
return result;
}
}
약간 시간을 잡아먹은 부분
배열은 size를 정해 줘야 하는데 동점자가 몇 명인지 알 수가 없어서 ArrayList에 동점자를 넣고
List를 또 배열로 변환해 주는 과정.
다른 사람의 정답을 보니 밑의 for문은
resultArray.stream().mapToInt(i->i.intValue()).toArray();
이렇게 바꿔 쓸 수 있다.
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [백준] 10844번 쉬운 계단 수 JAVA DP (0) | 2021.05.30 |
|---|---|
| [프로그래머스] 기능개발 JAVA (0) | 2021.05.26 |
| [프로그래머스] 체육복 JAVA (0) | 2021.05.22 |
| [프로그래머스] K번째수 JAVA (0) | 2021.05.20 |
| [백준] 15990번 1, 2, 3 더하기 5 JAVA (0) | 2021.05.17 |