https://programmers.co.kr/learn/courses/30/lessons/12927
ํ๋ฆฐ ์ฝ๋
import java.util.Arrays;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
int sum = 0;
for(int i=0; i<works.length; i++)
sum += works[i];
// ์์
๋ ๋ณด๋ค ํด๊ทผ๊น์ง ๋จ์ ์๊ฐ์ด ๋ ๋ง์๊ฒฝ์ฐ
if(n >= sum)
return 0;
while(n != 0) {
Arrays.sort(works);
works[works.length-1] --;
n --;
}
for(int i=0; i<works.length; i++) {
answer += (works[i] * works[i]);
}
return answer;
}
}
ํ์ด
๋ฌธ์ ์์ ์ฃผ์ด์ง ๋๋ก ๊ทธ๋๋ก ์ ๊ทผํด์ ํ์๋ค.
๋จ์ N์๊ฐ ๋์ ์์ ๋ works์ ํ๊ณ , ์ผ๊ทผ ํผ๋ก๋๋ฅผ ์ต์ํํ ๊ฐ์ ๋ฆฌํดํ๋ผ.
์์ 3๋ฒ๊ณผ ๊ฐ์ด works = [1,1] , N = 3 ์ผ๋,
works์ ํฉ๋ณด๋ค N์ด ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด => ๋ชจ๋ ์์ ๋์ ๋ง์ณค์ผ๋ฏ๋ก ํผ๋ก๋๋ 0์ด๋ค.
๊ทธ ์ธ์๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ํ ๊ฐ์ฅ ํฐ๊ฐ๋ค์ ์ค์ด๋ฉด ์ผ๊ทผ์ ์ต์ํ ํ ์ ์๋ค.
๋ฐ๋ผ์ N์ด 0์ด ๋ ๋๊น์ง, ๋ฐฐ์ด์ ์ ๋ ฌํ๊ณ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ค์ด๋ ์์ผ๋ก ํ์ผ๋ ,,
์ ํ์ฑ์ ๋ชจ๋ ํต๊ณผํ์ง๋ง ํจ์จ์ฑ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
works ์ ์ต๋ ๊ธธ์ด๋ 20,000 ์ด๊ณ n์ 1,000,000 ์ด๋ค.
1,000,000 * 20,000 ์ ํฐ ์ซ์๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ ๊ทผ์ ๋ค๋ฅด๊ฒ ํ๋ค .
์์ ๊ฐ์ ๋ฐฉ์๋๋ก๋ผ๋ฉด,, ์๋ฅผ๋ค์ด ์์ ๋์ด [1000, 1000, 1000, 1000, 2, 3, ... ] ์ ๊ฐ๋๋ผ๋
์์ ๋์ด ๊ฐ์ฅ ํฐ 1000์ ์ฌ๋ฌ๊ฐ์ด์ง๋ง, ํ๋ฒ์ ํ ๊ฐ๋ฐ์ ๊ฐ์์ํค์ง ๋ชปํ๋ฏ๋ก ๋นํจ์จ์ ์ด๋ค.
๋ฐ๋ผ์ works๋ฐฐ์ด์์ ์ต๋๊ฐ์ ์ฐพ๊ณ , ์ต๋๊ฐ๊ณผ ๋์ผํ ๋ ํ๋ฒ์ ๊ฐ์์ํค๋๋ก ํด๋ดค๋ค.
(์ฆ, n์ ๋น ๋ฅด๊ฒ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํด ๋ณด์๋ค.)
๊ทธ๋ฌ์ ํจ์จ์ฑ์์๋ ํต๊ณผ๊ฐ ๋๋ค. ๊ธฐํ ์ค๋ช ์ ์ฃผ์๋ฌธ , ,
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
int sum = 0;
for(int i=0; i<works.length; i++)
sum += works[i];
// ์์
๋ ๋ณด๋ค ํด๊ทผ๊น์ง ๋จ์ ์๊ฐ์ด ๋ ๋ง์๊ฒฝ์ฐ
if(n >= sum)
return 0;
// ๋จ์ ์๊ฐ ๋งํผ ์์
๋ ๊ฐ์ํ๊ธฐ
while(n != 0) {
int max = 0;
// ํ์ฌ ๋ฐฐ์ด ์ค ์์
๋์ด ๊ฐ์ฅ ํฐ ์ ์ฐพ๊ธฐ
for(int i=0; i<works.length; i++)
if(works[i] > max) max = works[i];
// ๋ฐฐ์ด ์์์ค max ๊ฐ๊ณผ ๋์ผํ๋ฉด ์ ๋ถ ๋ค ๊ฐ์์ํค๊ธฐ
for(int i=0; i<works.length; i++) {
if(works[i] == max) {
works[i] --;
n --;
// n์ด 0์ผ์ => ๋์ด์ ๊ฐ์์ํค์ง ๋ง๊ณ ์ข
๋ฃ
if(n == 0) break;
}
}
}
// ๋จ์ ์์
๋ ์ ๊ณฑํด์ ๋ชจ๋ ๋ํ๊ธฐ
for(int i=0; i<works.length; i++) {
answer += (works[i] * works[i]);
}
return answer;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 4948๋ฒ: ๋ฒ ๋ฅดํธ๋ ๊ณต์ค(์์, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด) (0) | 2020.03.03 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ๋ฉ๋ฆฌ ๋ฐ๊ธฐ(DP) (0) | 2020.03.03 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ๋จ์์นด๋ฉ๋ผ(Greedy) (0) | 2020.03.02 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ (0) | 2020.03.02 |
[๋ฐฑ์ค] 11727๋ฒ: 2xn ํ์ผ๋ง 2 (0) | 2020.03.02 |
๋๊ธ