자바 초급문제로 맨땅에 해딩하기

자바 초급문제 13. 예산

Jungsoomin :) 2020. 4. 5. 22:53

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12982)

 

자바 초급 문제의 Summer/Winter Coding(~2018) 안에 있는 예산 이다.

 

생각보다 빨리끝냈다. 40m정도 걸린 듯하다. 개인적으로 늘어서 그렇다기보다는 더 짧은 시간에 끝낼 수 있는 문제이고 내가 많이 부족하다는 느낌을 받게해주는 문제였다. 그만큼 겸손한 마음이 들 수 밖에 없는 것 같다.

 

처음엔 배열로 접근해보려고 했는데 그냥 그때그때마다 answer에 주자고 생각을 바꾸었다.

주석을 보시면 이클립스와 대화하는 필자의 모습이 보이실 거라고 생각이 든다. ArrayList<integer> 변수이름 = new ArrayList<Integer>(); 로 접근하는 게 더 빠를 것 같은 생각이 드는데 한 번 해봐야 알 것 같다. d의 배열 값을 0로 만들고 마지막 for문에서 그대로 돌린 점코드의 낭비를 만들었을 것같아서 아쉬운 마음이 든다.

 

안되겠지 요행은 안바래야지..하면서 체점에 들어갔는데 맞아버렸다.. 솔직히 뚱하고, 아쉽다. 더 하고 싶었던 모양인 것 같다.

 

다른 방식으로 접근해봐야겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package 예산;
 
import java.util.*;
 
public class exam {
    public int solution(int[] d, int budget) {
        int answer = 0;
        // d 는 부서당 써야하는 금액 정확히 그만큼 지원
        // budget은 예산, 남아도 최대한 많은 부서를 지원해야함
        // answer는 지원해준 부서의 수,, 배열의 합이 가장 크고 배열의 인덱스가 가장 많이 들어간 상황을 가정, 즉 배열의 길이가 더
        // 길어야함.
 
        Arrays.sort(d);// 배열 정렬, 작은 수대로 정렬 될 것임 예산이 작은 아이들 부터 줘야해
 
        for (int i = 0; i < d.length; i++) {
            if (d[i] < budget) {// 예산목록의 값이 예산보다 적은 값이면
 
                answer += 1;// 답에 1추가하고..
                budget -= (d[i]);// 넣은 d만큼 budget에서 삭감
                d[i] = 0;// 돈주면 0 으로 만듦
 
            } else {
                break// 남은 돈이 예산보다 for문 종료
            }
        }
 
        // 남은 돈이 예산 값이랑 같을 때를 가정해보면
        for (int i = 0; i < d.length; i++) {// 다시 d를 훑어보고..
            if (d[i] != 0 && d[i] == budget) {// 남은 돈이 0원이 아닌데 예산과 같은경우
                answer += 1// 1추가하고 끝내자
                break;
            }
        }
        // list에 준 부서와 돈이 있겠지..?
 
        return answer;
    }
}
cs

 

다른 테스트용 계정이므로 점수가 다를 것이다. 핸드폰으로 코딩하는 재미를 위해 만든 계정인데..노트북으로 코딩을 하는 과정에서 바꾸지 않은 것을 문제를 풀고나서 알게되었다..ㅠ