[programmers] ์•ผ๊ทผ ์ง€์ˆ˜ - Java

ํšŒ์‚ฌ์› Demi์˜ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฌธ์ œ์—์„œ, ์ดˆ๊ธฐ ์ฝ”๋“œ๋Š” ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜์—ฌ ์ตœ๋Œ€ ์ž‘์—…๋Ÿ‰์—์„œ 1์„ ๋นผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜์˜€์œผ๋‚˜, ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…๋Ÿ‰์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ๊ฐ€์žฅ ๋งŽ์€ ์ž‘์—…๋Ÿ‰์„ ๊ฐ€์ ธ์™€์„œ 1์„ ๋นผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜์˜€๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํž™ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ O(log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
DriedPollack's avatar
Apr 22, 2024
[programmers] ์•ผ๊ทผ ์ง€์ˆ˜ - Java

์•ผ๊ทผ ์ง€์ˆ˜

๋ฌธ์ œ ์„ค๋ช…

ํšŒ์‚ฌ์› Demi๋Š” ๊ฐ€๋”์€ ์•ผ๊ทผ์„ ํ•˜๋Š”๋ฐ์š”, ์•ผ๊ทผ์„ ํ•˜๋ฉด ์•ผ๊ทผ ํ”ผ๋กœ๋„๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์•ผ๊ทผ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์—์„œ ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์„ ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. Demi๋Š” N์‹œ๊ฐ„ ๋™์•ˆ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋„๋ก ์ผํ•  ๊ฒ๋‹ˆ๋‹ค.Demi๊ฐ€ 1์‹œ๊ฐ„ ๋™์•ˆ ์ž‘์—…๋Ÿ‰ 1๋งŒํผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ํ‡ด๊ทผ๊นŒ์ง€ ๋‚จ์€ N ์‹œ๊ฐ„๊ณผ ๊ฐ ์ผ์— ๋Œ€ํ•œ ์ž‘์—…๋Ÿ‰ works์— ๋Œ€ํ•ด ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • works๋Š” ๊ธธ์ด 1 ์ด์ƒ, 20,000 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • works์˜ ์›์†Œ๋Š” 50000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • n์€ 1,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

works
n
result
[4, 3, 3]
4
12
[2, 1, 2]
1
6
[1,1]
3
0

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
n=4 ์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [4, 3, 3] ์ด๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 4์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [2, 2, 2]์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ ์•ผ๊ทผ ์ง€์ˆ˜๋Š” 22 + 22 + 22 = 12 ์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ #2
n=1์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [2,1,2]๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 1์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [1,1,2]์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ์ง€์ˆ˜๋Š” 12 + 12 + 22 = 6์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ #3
๋‚จ์€ ์ž‘์—…๋Ÿ‰์ด ์—†์œผ๋ฏ€๋กœ ํ”ผ๋กœ๋„๋Š” 0์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ ์‹œ๋„ํ•œ ์ฝ”๋“œ

import java.util.*; class Solution { public long solution(int n, int[] works) { long answer = 0; for(int i=n; i>0; i--){ Arrays.sort(works); if(works[works.length-1]>0){ works[works.length-1]--; } } for(int i=0; i<works.length; i++){ answer += Math.pow(works[i], 2); } return answer; } }

๊ฐœ์„ ํ•œ ์ฝ”๋“œ

import java.util.PriorityQueue; import java.util.Collections; class Solution { public long solution(int n, int[] works) { PriorityQueue<Integer> overtime = new PriorityQueue<>(Collections.reverseOrder()); for (int work : works) { overtime.offer(work); } for (int i = 0; i < n; i++) { int max = (int)overtime.poll(); if (max <= 0) break; overtime.offer(max - 1); } return sumPow(overtime); } long sumPow(PriorityQueue<Integer> works) { long sum = 0; while (!works.isEmpty()) { sum += Math.pow(works.poll(), 2); } return sum; } }
 

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

  • ์ฒ˜์Œ ์‹œ๋„ํ•œ ์ฝ”๋“œ๋Š” n๋งŒํผ ๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์„œ ๋ฐฐ์—ด์˜ ์ตœ๋Œ“๊ฐ’์—์„œ 1์„ ๋นผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.
    • ์ด ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nlogn)์ด๊ณ , ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์—…๋Ÿ‰์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์ €์žฅํ–ˆ๋‹ค.
    • ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์ž‘์—…๋Ÿ‰์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ €์žฅํ•˜๊ณ , n๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ์ž‘์—…๋Ÿ‰์„ ๊ฐ€์ ธ์˜ค๊ณ  max ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
    • ๋งŒ์•ฝ max๊ฐ€ 0 ์ดํ•˜๋ผ๋ฉด ๋” ์ด์ƒ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต์„ ์ข…๋ฃŒํ•œ๋‹ค.
    • ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด max์—์„œ 1์„ ๋นผ๊ณ  ๋‹ค์‹œ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
    • ๊ทธ ํ›„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์žˆ๋Š” ๊ฐ’๋“ค์˜ ์ œ๊ณฑ์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
 

๊ฒฐ๋ก !

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ํž™ ๊ตฌ์กฐ๋กœ ์ธํ•ด O(log n) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
 
Share article

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปDriedPollack's Blog