Lee's Grow up

[Java/알고리즘] 프로그래머스 모의고사 본문

알고리즘/프로그래머스

[Java/알고리즘] 프로그래머스 모의고사

효기로그 2019. 9. 27. 17:46
반응형

문제 설명


배열 answers이/가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return/리턴 하도록 

solution 함수를 작성해주세요.

  • 시험은 최대 10,000 문로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예


answers return
[ 1, 2, 3, 4, 5 ] [ 1 ]
[ 1, 3, 2, 4, 2 ] [ 1, 2, 3 ]

입출력 예 설명


입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포지 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포지 1입니다.

 

입출력 예 #2

  • 모든 사람이 2문제씩 맞췄습니다.

나의 풀이


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
class Solution {
    public int[] solution(int[] answers) {
        
       int person1[] = { 12345 };
       int person2[] = { 21232425 };
       int person3[] = { 3311224455 };
        
       int[] result = { checkAnswerCounter(person1, answers), checkAnswerCounter(person2, answers),
                checkAnswerCounter(person3, answers) };
        
       int maxScore = Math.max(result[0], Math.max(result[1], result[2]));
        
        ArrayList<Integer> alist = new ArrayList<>();
 
        for (int i = 0; i < result.length; i++) {
            if (maxScore == result[i]) {
                alist.add(i + 1);
            }
        }
        
        int[] returnAnswer = new int[alist.size()];
        
        for (int i = 0; i < returnAnswer.length; i++) {
            returnAnswer[i] = alist.get(i);
        }
        return returnAnswer;
    }
    
   public static int checkAnswerCounter(int person[], int answer[]) {
        int hitCnt = 0;
        for (int i = 0; i < answer.length; i++) {
            if (person[i % person.length== answer[i]) {
                hitCnt++;
            }
        }
        return hitCnt;
    }
}
 

 

풀이 설명


1번, 2번, 3번의 수포자는 각각 동일한 패텬으로 반복이 되게 정답을 찍기 때문에 해당 반복 구문을

각각의 person1[], person2[], person3[]의 배열로 초기화 해줍니다. 그 후 checkAnswerCounter 함수를 통해

정답의 횟수 카운터를 도출합니다. 

그 후 Math클래스의 max 함수를 사용해서 정답 횟수중 가장 많이 맞춘 정답 갯수를 추출

정답 갯수가 동일한 사람 = 최대로 많이 맞춘 사람일 경우 list 컬렉션에 추가 

리턴타입이 int[]이기 떄문에 리턴타입에 맞게 컬렉션을 변환 후 리턴을 해줍니다.

 

 

마치며

 

항상 느끼는 거지만 다른 사람의 풀이를 보면 감탄을 하게 되는거 같습니다.

저의 풀이는 제가 풀었던 방식에 대한 설명이며 최적의 방식이 아니라고 말씀을 드리며

혹시나 도움이 필요하신 분들에게 참고가 되었으면 좋겠습니다.

 

반응형
Comments