JAVA/Argorithm Test

# Level1 - 모의고사 (완전탐색)

skysoo1111 2020. 10. 30. 14:38

[문제]

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

 

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

 

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

 

[내 풀이]

나는 이번에 결과 값을 구하는 과정에서 stream()을 활용했는데, 일부러 사용했다.

 

짧은 코드가 무조건 좋은 코드가 아닌 것은 안다.

 

하지만 간결한 코드를 작성할 수 있는 사람이 상황에 따라 원시적인 코드나 간결한 코드를 취사 선택하여 작성하는 것과 간결한 코드를 작성하지 못해서 원시적인 코드만을 작성하는 것은 천지차이라고 생각한다.

 

지금 나는 stream()의 사용법을 더 많이 익히고 활용해보고 싶기 때문에 앞으로도 굳이 이걸 stream()으로? 하는 코드들까지 작성할 생각이다.

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        int[] aAnswers = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5};
        int[] bAnswers = {2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5}; 
        int[] cAnswers = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        Map<String, Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();

        // 성적 구하기
        for (int i=0;i<answers.length;i++) {
            int num = answers[i];
            if (aAnswers[i%aAnswers.length]==num)
                map.put("1", map.getOrDefault("1",0)+1);

            if (bAnswers[i%bAnswers.length]==num)
                map.put("2", map.getOrDefault("2",0)+1);

            if (cAnswers[i%cAnswers.length]==num)
                map.put("3", map.getOrDefault("3",0)+1);
        }

        // 최고 득점 추출
        int maxValue = map.entrySet().stream()
                .max(Map.Entry.comparingByValue())
                .map(Map.Entry::getValue)
                .get();

        // 최고 득점자 list에 담기
        map.forEach((key, value) -> {
            if (value==maxValue)
                list.add(Integer.valueOf(key));
        });

        // 최고 득점자 오름차순 정렬 및 Array 변환
        answer = list.stream().sorted().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

 

<문제 출처>

programmers.co.kr/learn/courses/30/lessons/42840

 

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

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

programmers.co.kr

 

'JAVA > Argorithm Test' 카테고리의 다른 글

# Level1 - 문자열 내 P와 Y의 개수  (0) 2020.11.04
# Level1 - 3진법 뒤집기  (0) 2020.11.02
# Level1 - 예산  (0) 2020.10.30
# Level1 - 두개 뽑아서 더하기  (0) 2020.10.29
# Level1 - [1차] 비밀지도  (0) 2020.10.28