프로그래머스 모의고사

박은빈·2022년 11월 1일

코딩

목록 보기
12/19

https://school.programmers.co.kr/learn/courses/30/lessons/42840

풀이방법

  1. 각 수포자가 찍는 방식을 배열로 만들어두었다
  2. answers의 값을 반복문에넣고 돌리면서 수포자의 배열도 넣었다
  3. 만약 수포자들의 배열이 끝이나면 다시 처음부터 시작해야된다
  4. 그래서 나머지 연산을 이용하였다. 나머지 연산을 이용하면 아무리 값이 올라가도 나머지만 나오기때문에 length를 벗어나지 않는다
  5. 그렇게 점수들을 모은다음 거기서 최대값을 알아내었다.
  6. 최대값을 알아내고 if문을 통해 최대값과 같은 사람 즉 가장 높은 점수를 받은 사람들을 list에 집어넣었다
  7. 그 list의 크기만큼의 배열을 만들고 그 배열안에 list를 넣었다
  8. 그다음 배열을 리턴

코드

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
		int[] answer = {};
        
        int[] supo1 = {1, 2, 3, 4, 5};
        int[] supo2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] supo3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        int[] cnt = {0,0,0};

        for(int i=0; i<answers.length; i++) {
            if(supo1[i%supo1.length] == answers[i]) {
                cnt[0]++;
            }
            if(supo2[i%supo2.length] == answers[i]) {
                cnt[1]++;
            }
            if(supo3[i%supo3.length] == answers[i]) {
                cnt[2]++;
            }
        }

        int max = Math.max(Math.max(cnt[0], cnt[1]),cnt[2]);

        ArrayList<Integer> maxList = new ArrayList<>();

        if(cnt[0] == max) {
            maxList.add(1);
        }
        if(cnt[1] == max) {
            maxList.add(2);
        }
        if(cnt[2] == max) {
            maxList.add(3);
        }

        answer = new int[maxList.size()];

        for(int i =0; i<answer.length; i++) {
            answer[i] = maxList.get(i);
        }
        return answer;
    }
}

i%supo.length를 했을때
1%10 = 1이다
11%10 = 1
21%10 = 1
즉 수가 아무리 올라가도 배열의 length안에서 수가 돌아간다

그 후 max를 구하는 식은 Math.max를 이용해 [0]과 [1]중에 큰 수를 고르고 그 값과 [2]를 비교시켰다

헤맸던곳

레벨1짜리이지만 까보면 좀 난이도가 있다 1은 아니고 2에 가까운 수준이다

나는 이 문제에 거의 3시간을 쏟았다
사실 문제는 맞췄었는데 아무리 밑에 최대값을 구하고 list에 집어넣는 코드를 바꾸고 고쳐도 특정 문제가 오답으로 나왔다.
너무 개빡쳐서 떄려치려고 하기전 코드를 처음주터 깊게 살펴보았다
그리고 깨달았다

for문안에 supo1 supo2 supo3이렇게 되야되는데
supo1 supo2 supo2이렇게 supo2가 2번 반복되어있었다

그래서 이 코드를 고친다음에 돌려보니깐 와 바로성공
이 오타 하나때문에 문제푼시간 제외 2시간50분은 쏟아부은거같다

개발자분들이 말하던것이 있다.
복붙할때 오타를 조심하라고
나는 supo2를 복붙하고나서 안바꿨었다.
이러한 가벼운 실수때문에 시급기준 약 25000원어치를 쏟아부었다
완전 비효율적이다
오타는 정말정말정말 중요하단것을 이번일로 깨달았다. 정말 조심하자 정말

profile
안녕하세요

0개의 댓글