본문 바로가기
알고리즘

[프로그래머스] 모의고사

by steadyMan 2022. 3. 4.

프로그래머스 링크 

https://programmers.co.kr/learn/courses/30/lessons/42840?language=java 

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

제출 코드 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int[] answers) {
        
        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 A=0;
        int B=0;
        int C=0;
        for (int i = 0; i < answers.length; i++) {
        	if(answers[i] == a[i%a.length]) {A++;}
        	if(answers[i] == b[i%b.length]) {B++;}
        	if(answers[i] == c[i%c.length]) {C++;}
		}
        int max = Math.max(Math.max(A, B), C);
        List<Integer> result = new ArrayList<Integer>();
        if(max == A) result.add(1);
        if(max == B) result.add(2);
        if(max == C) result.add(3);
        answers = new int[result.size()];
        for (int i = 0; i < answers.length; i++) {
        	answers[i] = result.get(i);
		}
        return answers;
    
    }
}

비교 대상이 제한적이라 필드에 직접 작성하여 풀이해도 되었던 문제였다.

 

a, b, c를 어떻게 반복처리를 할까 고민했었는데 

인덱스에 배열의 길이를 나눈 나머지를 활용하는 방법을 다른분들의 풀이를 보고 참고하였다. 

%의 연산은 몫이 0이면 나머지결과는 연산대상이 된다. 

EX) 3%5 = 3

 

최대값을 구하는 것도 배열에 담아 역순으로 정렬하는 방법을 생각했는데

max함수를 활용한 깔끔한 방법을 알아내어 사용하였다. 

 

 

'알고리즘' 카테고리의 다른 글

[알고리즘] 다양한 정렬 알고리즘  (0) 2022.04.28
[알고리즘] 숫자를 뒤집기  (0) 2022.04.06
[프로그래머스] 주식가격  (0) 2022.02.01
[프로그래머스] 프린트  (0) 2022.01.23
[프로그래머스] 기능개발  (0) 2022.01.21

댓글