본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 12938번: 최고의 집합 [Java] 실패

문제: https://school.programmers.co.kr/learn/courses/30/lessons/12938

 

프로그래머스

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

programmers.co.kr

1. 코드

class Solution {
    public int[] solution(int n, int s) {
        if(n > s) return new int[] {-1};
        int[] answer = new int[n];
        int index = 0;
        while(n > 0){
            int value = s/n;
            answer[index++] = value;
            s -= value;
            n--;
        }
        return answer;
    }
}

2. 설명

우선 n이 s보다 크다면 1로 조합을 해도 합이 s를 무조건 넘게 되기에 최고의 집합이 존재할 수 없기에 값이 -1인 배열을 반환합니다.

index는 배열의 인덱스 값을 의미하며 반복문이 진행될 때 순차적으로 1씩 증가합니다. 그리고 value의 값은 s / n인데 이러한 이유는 조합들 중 곱이 가장 높은 것을 고르기 위함입니다. 그리고 s에서 value값을 빼주며 n을 1씩 낮추어 반복적으로 진행하여 문제가 해결됩니다.

3. 느낀점

  1. 엄청나게 간단한 코드이지만 시간 초과를 해결하기 힘들었다.
  2. 다음은 실패하지 않도록 해야겠다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges