프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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;
    }
}시간 초과는 따로 뜨는걸로 알고있는데
잘못알고 있는건가...
어쨌든 통과는 했다...
근데 딱봐도 코드가 비효율적이라 조금더 생각해봐야겠다
'알고리즘, SQL' 카테고리의 다른 글
| 프로그래머스 SQL 문제풀이 성분으로 구분한 아이스크림 총 주문량 (1) | 2024.09.12 | 
|---|---|
| 프로그래머스 알고리즘 문제풀이 달리기 경주 (시간 초과) (0) | 2024.08.28 | 
| 프로그래머스 알고리즘 문제풀이 햄버거 만들기 (시간 초과) (0) | 2024.08.22 | 
| 프로그래머스 코딩테스트연습 133499 '옹알이 (2)' (0) | 2024.08.13 |