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

한규한·2022년 9월 5일
0

문제

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

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

풀이

1번사람 = {1,2,3,4,5};
2번사람 = {2,1,2,3,2,4,2,5};
3번사람 = {3,3,1,1,2,2,4,4,5,5};
1. 각 사람의 정답으로 풀었을때 점수 계산.
2. Pair(n번째 사람, value) 클래스를 만든다.
3. value 기준 내림차순
4. max_value를 구하고 최댓값인 사람들만 리스트에 추가.
5. ArrayList를 int array 로 convert.

코드

import java.util.*;
class Pair implements Comparable<Pair>{
    int x; //index
    int y; //value
    Pair(int a, int b){
        x =a ;
        y = b;
    }
      public int compareTo(Pair other) 
    { 
          return other.y - this.y; 
    }
    public int getX(){
        return this.x;
    }
    public int getY(){
        return this.y;
    }
}
class Solution { 
    public int numberOfanswer(int[] number, int[] answer){
        int j =0 ;
        int i = 0;
        int count =0 ;
        while(i < answer.length){
            if(answer[i++] == number[j++]) count++;
            if(j == number.length) j = 0 ; //j 초기화.
        }
        return count;
    }
    public int[] solution(int[] answers) {

      int[] number1 = {1,2,3,4,5};
        int[] number2 = {2,1,2,3,2,4,2,5};
        int[] number3 = {3,3,1,1,2,2,4,4,5,5};
        //index, value
        int p1 = numberOfanswer(number1, answers);
        int p2 = numberOfanswer(number2, answers);
        int p3 = numberOfanswer(number3, answers);
        List <Pair> list = new ArrayList();
        List <Integer> answer = new ArrayList();
        list.add(new Pair(1,p1));
        list.add(new Pair(2,p2));
        list.add(new Pair(3,p3));
Collections.sort(list);
        int max=list.get(0).getY(); 
        answer.add(list.get(0).getX());
        
        for(int i = 1 ;i < list.size(); i++){
            if(list.get(i).getY() == max){
                answer.add(list.get(i).getX());
            }
        }
        return answer.stream().mapToInt(i -> i).toArray(); 
    }
  
}

0개의 댓글