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

권용환·2021년 8월 23일
0

programmers_level1

목록 보기
10/14
post-thumbnail

문제 바로가기

나의 풀이

우선 나는 int 배열의 최댓값을 구할때 Arrays.stream()을 이용했는데 Math.max를 이용할 수도 있을 듯 하다.

Java에서는 int 배열을 선언할 때 크기도 같이 결정해주어야하기 때문에, 최고점을 받은 사람이 1명인지, 2명인지 모르는 상태에서 반환될 배열을 만드는 것은 불가능하다고 생각했다. 그래서 나는 그냥 반환형을 int[]에서 List<Integer>으로 바꿔버렸다.
코테에서는 이렇게 풀면 오답으로 처리할 것 같다

다른 사람들의 풀이를 보니 크게 2가지 방법으로 내가 헤멘 문제를 해결할 수 있을듯하다.

첫번째 방법

List<Integer> list = new ArrayList<>();
#중략
int[] answer = new int[list.size()];

이렇게 Arraylist에 add한 채로 그의 size에 맞게 다시 int 배열을 생성하고, 값을 다시 대입해서 반환하는 방법이다. (파이썬이라면 안써줘도 될 코드를 자바는 써야한다... ㅂㄷㅂㄷ 🤢)

두번째 방법

ArrayList<Integer> list = new ArrayList<>();
#중략
return list.stream().mapToInt(i->i.intValue()).toArray();

이렇게 stream().mapToInt().toArray()를 사용해도 ArrayList를 int 배열로 바꾸어 반환 가능하다.

위 두가지 방법을 모두 숙지해두고 다음 문제부터는 적용할 수 있도록 해야겠다.

import java.util.*;

class Solution {
    public static List<Integer> solution(int[] answers) {
        int[] answer = new int[3];
        int[] person1 = {1, 2, 3, 4, 5};
        int[] person2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] person3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == person1[i % 5]) {
                answer[0] += 1;
            }
            if (answers[i] == person2[i % 8]) {
                answer[1] += 1;
            }
            if (answers[i] == person3[i % 10]) {
                answer[2] += 1;
            }
        }

        int max = Arrays.stream(answer).max().getAsInt();
        List<Integer> result = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            if (answer[i] == max) {
                result.add(i+1);
            }
        }
        return result;
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글