알고리즘, SQL

240808

everyday-spring 2024. 8. 8. 17:10

프로그래머스 모의고사 문제 바로가기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

우선은 문제 해결을 목표로 하고

좀 더 효율적인 코드는 이 후에 생각하는 방식으로 진행하고 있다

아래 코드로 작성을 했는데 논리적으로 어디가 잘못됐는지 모르겠는데

10, 11, 12 케이스에서 실패를 했다

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        int[] stu1 = {1, 2, 3, 4, 5};
        int[] stu2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] stu3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        ArrayList<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(0);
        list.add(0);
        
        for(int i = 0; i < answers.length; i++){
            if(answers[i] == stu1[i % stu1.length]){
                list.set(0, list.get(0) + 1);
            }
            if(answers[i] == stu2[i % stu2.length]){
                list.set(1, list.get(1) + 1);
            }
            if(answers[i] == stu3[i % stu3.length]){
                list.set(2, list.get(2) + 1);
            }
        }
        
        int maxCount = 0;
        if(Collections.max(list) == list.get(0)) maxCount++;
        if(Collections.max(list) == list.get(1)) maxCount++;
        if(Collections.max(list) == list.get(2)) maxCount++;
        
        answer = new int[maxCount];
        maxCount = 0;
        if(list.get(0) == Collections.max(list)) answer[maxCount++] = 1;
        if(list.get(1) == Collections.max(list)) answer[maxCount++] = 2;
        if(list.get(2) == Collections.max(list)) answer[maxCount++] = 3;
        
        return answer;
    }
}

 

고민을 하다가

최대값받는 부분만 수정을 했는데 

통과를 했다 ;;

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        int[] stu1 = {1, 2, 3, 4, 5};
        int[] stu2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] stu3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        ArrayList<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(0);
        list.add(0);
        
        for(int i = 0; i < answers.length; i++){
            if(answers[i] == stu1[i % stu1.length]){
                list.set(0, list.get(0) + 1);
            }
            if(answers[i] == stu2[i % stu2.length]){
                list.set(1, list.get(1) + 1);
            }
            if(answers[i] == stu3[i % stu3.length]){
                list.set(2, list.get(2) + 1);
            }
        }
        
        int maxCount = 0;
        int max = Collections.max(list);
        if(max == list.get(0)) maxCount++;
        if(max == list.get(1)) maxCount++;
        if(max == list.get(2)) maxCount++;
        
        answer = new int[maxCount];
        maxCount = 0;
        if(list.get(0) == max) answer[maxCount++] = 1;
        if(list.get(1) == max) answer[maxCount++] = 2;
        if(list.get(2) == max) answer[maxCount++] = 3;
        
        return answer;
    }
}

시간 초과는 따로 뜨는걸로 알고있는데

잘못알고 있는건가...

어쨌든 통과는 했다...

근데 딱봐도 코드가 비효율적이라 조금더 생각해봐야겠다