728x90
쉬운데 5점이나 줫다
풀면서 문제가 이렇게 쉽다고? 생각했는데 진짜 쉬웟다
이게 기둥과보랑 같이 있는 문제라는 것이 믿겨지지 않는다.
처음에는 Solution으로 풀었는데 (반복문 쓰면 통과 못할까봐)
그냥 Solution1처럼 반복문 쓰고 풀어도 풀린다
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | public long solution1(int n, int[] works) { PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); long answer = 0; long sum = 0; for (int i = 0; i < works.length; i++) { pq.add(works[i]); sum += works[i]; } if (sum - n <= 0) return 0; while (true) { int now = pq.poll(); pq.add(now - 1); if (n-- == 1) break; } while (!pq.isEmpty()) { int now = pq.poll(); answer += (now * now); // System.out.println(pq.poll()); } return answer; } // fail public long solution(int n, int[] works) { long answer = 0; // Arrays.sort(works); long sum = 0; int leng = works.length; for (int i = 0; i < works.length; i++) { sum += works[i]; // System.out.println(works[i]); } long minSum = sum - n; // 일 총합에서 야근뺀것.. 이걸로 야근지수 만듬.. long aver = minSum / leng; if (minSum <= 0) return 0; // System.out.println(); // System.out.println(minSum); // System.out.println(aver); // System.out.println(aver*leng); long plusOneCount = minSum - aver * leng; answer = (aver * aver) * (leng - plusOneCount) + (aver + 1) * (aver + 1) * (plusOneCount); // System.out.println(leng-plusOneCount); // System.out.println(plusOneCount); return answer; } |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 최고의 집합 (규칙찾기) (0) | 2019.11.28 |
---|---|
프로그래머스 - 줄 서는 방법 (규칙 찾기) (0) | 2019.11.28 |
프로그래머스 - 멀리 뛰기 (DP) (0) | 2019.11.28 |
4 ★★★ 프로그래머스 - 거스름돈 (DP) (2) | 2019.11.28 |
프로그래머스 - [2020카카오공채] 기둥과 보 설치 (구현, 푸는중..) (0) | 2019.11.26 |