[프로그래머스,Level 1] 모의고사(JAVA 구현)

2021. 1. 4. 10:50·CodingTest/프로그래머스(Programmers)
반응형

- 첫 풀이

  이 문제는 처음 풀 때 문제에 대한 이해가 부족했었다. 문제에서의 조건은 '1번부터 마지막 문제까지의 정답이 들은 배열 answers'이라 했지만, 필자는 수포자들이 찍은 문제의 수만큼 정답이 반복한다고 생각했다.(왜 그랬는지 모르겠다.) 예를 들어, 1번 수포자는 1,2,3,4,5,1,2,3,4,5 순으로 문제를 찍을 때, answers의 배열인 1,2,3,4,5가 1번 수포자가 찍은 문제를 반복해서 순회한다고 생각했다. 

 

- 정답 풀이

  그러나 위와 반대로 주어지는 정답 배열에 규칙성있게 찍는 수포자들의 번호가 몇 개가 일치하는지를 알아내면 되는 것이었다. 즉, 문제의 수가 10개인 정답 배열이 주어진다면, 수포자들은 10번까지 규칙성 있게 문제를 찍는 것이다. 

import java.util.ArrayList;

class Solution {
    public ArrayList<Integer> solution(int[] answers) {
        // 1. 수포자들의 규칙성있는 찍기.
        int[][] people = {{1,2,3,4,5},{ 2, 1, 2, 3, 2, 4, 2, 5},{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}};
        // 2. 수포자들의 정답 수를 저장할 배열.
        int[] collect = new int[3];
        // 3. 제일 많이 맞힌 사람을 담아 반환할 ArrayList.
        ArrayList<Integer> answer = new ArrayList<>();        
        int max = Integer.MIN_VALUE;
        // 4. 수포자들 수 만큼 반복.                  
        for(int i =0;i<3;i++){
            // 4-1. 각 수포자들의 정답 수를 저장할 변수.
            int cnt = 0;   
            // 4-2. 규칙성있는 찍기를 탐색하기 위한 인덱스.
            int idx = 0;
            // 4-3. 1번부터 마지막 문제까지의 정답을 탐색.
            for(int j=0;j<answers.length;j++){
                // 4-4. 정답 배열의 크기 > 위에서 저장한 규칙성있는 배열의 크기인 경우, 다시 0번 인덱스부터 탐색.
                if(idx == people[i].length) idx = 0;
                // 4-5. 정답인 경우 cnt 증가.
                if( answers[j] == people[i][idx]){
                    cnt++;
                }
                // 4-6. 다음 찍은 문제 탐색을 위해 idx 증가.
                idx++;
            }            
            // 5. 가장 많이 맞힌 문제의 수를 저장.
            if(cnt > max) max = cnt;
            // 6. 각각의 수포자들이 맞힌 문제를 저장.
            collect[i] = cnt;            
        }
        // 7. 세 명의 수포자들이 맞힌 수 중 최대값인 경우는 ArrayList에 삽입.   
        for(int i =0;i<3;i++){
            if(collect[i] == max) answer.add(i+1);
        }
                
        return answer;
    }
}

 

저작자표시 (새창열림)
'CodingTest/프로그래머스(Programmers)' 카테고리의 다른 글
  • [프로그래머스,Level 1] 두 개 뽑아서 더하기(JAVA 구현)
  • [프로그래머스,Level 1] 완주하지 못한 선수(JAVA 구현)
  • [프로그래머스,Level 1] K번째 수(JAVA 구현)
  • [프로그래머스,Level 1] 체육복(JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Easy
    medium
    meidum
    leetcode 2236
    프로그래머스
    boj1427
    백준7576자바
    component-scan
    Java
    알고리즘
    자바
    백준
    TypeScript
    백준2751
    boj2108
    백준1260
    백준1427
    BOJ
    백준7576
    next 14
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[프로그래머스,Level 1] 모의고사(JAVA 구현)
상단으로

티스토리툴바