โค๏ธ Problem
- ๋ฌธ์
์ํผ ๊ฒ์ ๊ฐ๋ฐ์ ์ค๋ ๋ฆฌ๋ ํฐ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๊ทธ๋ ๊ฐ ๋ง๋ ํ๋์ฆ ์ค์ฒ์ฑ์ด ๋์ฑ๊ณต์ ๊ฑฐ๋์ง๋ง, ์์ฆ ์ ๊ท ์ฌ์ฉ์์ ์๊ฐ ๊ธ๊ฐํ ๊ฒ์ด๋ค. ์์ธ์ ์ ๊ท ์ฌ์ฉ์์ ๊ธฐ์กด ์ฌ์ฉ์ ์ฌ์ด์ ์คํ ์ด์ง ์ฐจ์ด๊ฐ ๋๋ฌด ํฐ ๊ฒ์ด ๋ฌธ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํ ๊น ๊ณ ๋ฏผ ํ ๊ทธ๋ ๋ ๋์ ์ผ๋ก ๊ฒ์ ์๊ฐ์ ๋๋ ค์ ๋์ด๋๋ฅผ ์กฐ์ ํ๊ธฐ๋ก ํ๋ค. ์ญ์ ์ํผ ๊ฐ๋ฐ์๋ผ ๋๋ถ๋ถ์ ๋ก์ง์ ์ฝ๊ฒ ๊ตฌํํ์ง๋ง, ์คํจ์จ์ ๊ตฌํ๋ ๋ถ๋ถ์์ ์๊ธฐ์ ๋น ์ง๊ณ ๋ง์๋ค. ์ค๋ ๋ฆฌ๋ฅผ ์ํด ์คํจ์จ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ผ.
์คํจ์จ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
์คํ ์ด์ง์ ๋๋ฌํ์ผ๋ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด์ ์ / ์คํ ์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์
์ ์ฒด ์คํ ์ด์ง์ ๊ฐ์ N, ๊ฒ์์ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ๋ฉ์ถฐ์๋ ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด stages๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์คํจ์จ์ด ๋์ ์คํ ์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ฒจ์๋ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ.
- ์ ํ ์ฌํญ
- ์คํ ์ด์ง์ ๊ฐ์ N์ 1 ์ด์ 500 ์ดํ์ ์์ฐ์์ด๋ค.
- stages์ ๊ธธ์ด๋ 1 ์ด์ 200,000 ์ดํ์ด๋ค.
- stages์๋ 1 ์ด์ N + 1 ์ดํ์ ์์ฐ์๊ฐ ๋ด๊ฒจ์๋ค.
- ๊ฐ ์์ฐ์๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ๋์ ์ค์ธ ์คํ ์ด์ง์ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค.
- ๋จ, N + 1 ์ ๋ง์ง๋ง ์คํ ์ด์ง(N ๋ฒ์งธ ์คํ ์ด์ง) ๊น์ง ํด๋ฆฌ์ด ํ ์ฌ์ฉ์๋ฅผ ๋ํ๋ธ๋ค.
- ๋ง์ฝ ์คํจ์จ์ด ๊ฐ์ ์คํ ์ด์ง๊ฐ ์๋ค๋ฉด ์์ ๋ฒํธ์ ์คํ ์ด์ง๊ฐ ๋จผ์ ์ค๋๋ก ํ๋ฉด ๋๋ค.
- ์คํ ์ด์ง์ ๋๋ฌํ ์ ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ์คํ ์ด์ง์ ์คํจ์จ์ 0 ์ผ๋ก ์ ์ํ๋ค.
- ์ ์ถ๋ ฅ ์ & ์ค๋ช
no | N | stages | result |
1 | 5 | [2, 1, 2, 6, 2, 4, 3, 3] | [3,4,2,1,5] |
2 | 4 | [4,4,4,4,4] | [4,1,2,3] |
- 1๋ฒ ์คํ
์ด์ง์๋ ์ด 8๋ช
์ ์ฌ์ฉ์๊ฐ ๋์ ํ์ผ๋ฉฐ, ์ด ์ค 1๋ช
์ ์ฌ์ฉ์๊ฐ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ 1๋ฒ ์คํ
์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
1 ๋ฒ ์คํ ์ด์ง ์คํจ์จ : 1/8
2๋ฒ ์คํ ์ด์ง์๋ ์ด 7๋ช ์ ์ฌ์ฉ์๊ฐ ๋์ ํ์ผ๋ฉฐ, ์ด ์ค 3๋ช ์ ์ฌ์ฉ์๊ฐ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ 2๋ฒ ์คํ ์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
2 ๋ฒ ์คํ ์ด์ง ์คํจ์จ : 3/7
๋ง์ฐฌ๊ฐ์ง๋ก ๋๋จธ์ง ์คํ ์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
3 ๋ฒ ์คํ ์ด์ง ์คํจ์จ : 2/4
4๋ฒ ์คํ ์ด์ง ์คํจ์จ : 1/2
5๋ฒ ์คํ ์ด์ง ์คํจ์จ : 0/1
๊ฐ ์คํ ์ด์ง์ ๋ฒํธ๋ฅผ ์คํจ์จ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
[3,4,2,1,5] - ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ง์ง๋ง ์คํ
์ด์ง์ ์์ผ๋ฏ๋ก 4๋ฒ ์คํ
์ด์ง์ ์คํจ์จ์ 1์ด๋ฉฐ ๋๋จธ์ง ์คํ
์ด์ง์ ์คํจ์จ์ 0์ด๋ค.
[4,1,2,3]
๐ Solution
ํ์ด
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] clear = new int[N];
int[] stay = new int[N];
for(int i=0; i<stages.length; i++) {
for(int j=0; j<stages[i]; j++) {
clear[j]++;
if(j==stages[i]-1) {
stay[j]++;
}
if(j==N-1) {
break;
}
}
}
double[] percent = new double[N];
for(int i=0; i<clear.length; i++) {
if(stay[i]!=0) {
percent[i] = (double)stay[i]/(double)clear[i];
} else {
percent[i] = 0;
}
}
Map<Integer, Double> map = new TreeMap<>();
for(int i=0; i<percent.length; i++) {
map.put(i+1, percent[i]);
}
Object[] sorting = map.values().toArray();
Arrays.sort(sorting, Collections.reverseOrder());
for(int i=0; i<sorting.length; i++) {
for(int j=0; j<map.size(); j++) {
if(map.get(j+1)==sorting[i]) {
sorting[i] = j+1;
map.remove(j+1, sorting[i]);
}
}
}
for(int i=0; i<sorting.length; i++) {
answer[i] = (int) sorting[i];
}
return answer;
}
}
์ฒ๋ฆฌ์๋ SO SO
๐ Comment
์ ์ด ๋ฌธ์ ๋ ์ง์ง ์ค๋ ๊ฑธ๋ ธ๊ณ , ํ ์คํธ ์ผ์ด์ค๊ฐ ๊ณ์ 1, 6, 7, 9, 13, 24, 25๋ฒ์ด ์คํจํด์ ๊ณ ๋ฏผ์ ๊ณ ๋ฏผ์ ๊ฑฐ๋ญํ๋ ๋ฌธ์ ๋ค. ์ฒ๋ฆฌ ์๋๋ ๋ง์์ ๋ค์ง ์์ง๋ง ํ์๋ค๋ ๊ฒ์ ์์๋ฅผ ๋๊ณ ์๋ค. Map์ ์ฌ์ฉํ์ง ์๊ณ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด ์ข ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค.
๋จผ์ , ์ ๋ต์ ๋ด์ ๋ฐฐ์ด int[] answer์ ์คํ ์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์๋ฅผ ๋ด์ ๋ฐฐ์ด int[] clear, ์คํ ์ด์ง์ ๋๋ฌํ์ผ๋ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด ์๋ฅผ ๋ด์ ๋ฐฐ์ด int[] stay๋ฅผ ์คํ ์ด์ง ๊ฐ์์ธ N ํฌ๊ธฐ ๋งํผ ๋ง๋ค์ด ๋์๋ค. ๊ฐ๊ฐ์ ์ธ๋ฑ์ค๋ ์คํ ์ด์ง ๋ฒํธ๊ฐ ๋๋ค. ์คํ ์ด์ง๋ 1๋ถํฐ ์์ํ์ง๋ง ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก ์ผ๋จ +1์ ๋์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ ๋ค์ ์ด์คfor๋ฌธ์ ์ฌ์ฉํด์ i์๋ stages.length๊น์ง, j๋ stages[i]๊น์ง ๋๋๋ก ๊ตฌํํ๋ค. stages[i]๋ ๊ฐ ์ฌ์ฉ์๊ฐ ๋๋ฌํ ์คํ ์ด์ง ๋ฒํธ์ด๋ฏ๋ก ์ค์ ๊ฐ ์ฌ์ฉ์๋ค์ด ํด๋ฆฌ์ดํ ์คํ ์ด์ง ๋ฒํธ๋ stages[i]-1, ์ฆ j-1์ด ๋๋ค. ๋ฐ๋ผ์ ๋๋ฌํ ์คํ ์ด์ง ๋ฒํธ๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฐ๋ clear[j]๋ ๊ณ์ ์ฆ๊ฐํ๋๋ก ๊ตฌํํ๋ค., stay[j]๋ j==stages[i]-1์ธ ๊ฒฝ์ฐ์ stay[j]๊ฐ ์ฆ๊ฐํ๋๋ก ํ์๋ค. ๊ทธ๋ฆฌ๊ณ j๊ฐ N-1์ด๋ฉด ๊ทธ ๋ค์ ์ฌ์ฉ์์ ์คํ ์ด์ง ๋ฒํธ๋ฅผ i์ ๋ฃ๋๋ก break;๋ฅผ ์ ์ธํ๋ค.
ํ๋ฅ ์ ๊ตฌํ๊ธฐ ์ํด์ double[] percent๋ฅผ ์ ์ธํ๊ณ ํด๋น ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ ๊ฐ ์คํ ์ด์ง๊ฐ ๋๋ค. ์คํ ์ด์ง์ ๋๋ฌํ์ผ๋ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด ์๊ฐ 0์ธ ๊ฒฝ์ฐ๋ ๋ฌด์กฐ๊ฑด ์คํจ์จ์ด 0์ด์ฌ์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์ํด for ๋ฐ๋ณต๋ฌธ์ if ์กฐ๊ฑด๋ฌธ์ ๋ฃ์๋ค. stay[i]๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ๋ ์คํจ์จ์ percent[i]์ ๋ฃ๋๋ก ํ์๊ณ , 0์ธ ๊ฒฝ์ฐ๋ 0์ ๋ฃ๋๋ก ํ์๋ค. ์ด ๋ถ๋ถ์ ๋์ณ์ ๊ณ์ ํ ์คํธ ์ผ์ด์ค 1, 6, 7, 9, 13, 24, 25๋ฒ์ด ํต๊ณผํ์ง ์์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ ๋ค์ TreeMap์ ์ฌ์ฉํ์ฌ key๋ก๋ i+1์, value๋ก๋ percent[i]๊ฐ ๋ค์ด๊ฐ๋๋ก for ๋ฐ๋ณต๋ฌธ์ ๊ตฌ์ฑํ๋ค. i๋ ๊ฐ ์คํ ์ด์ง ๋ฒํธ๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค์ธ๋ฐ ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์คํ ์ด์ง๋ 1๋ถํฐ ์์ํ๋ฏ๋ก +1์ ํด์ค ๊ฒ์ด๋ค. TreeMap๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๊ธฐ์ต์ด ๋์ง ์๋๋ฐ ์ด ๋ถ๋ถ์ ์ถํ์ ์์ ํ๋ ค๊ณ ํ๋ค๐
๊ทธ ๋ค์, Object[] sorting์ ์ ์ธํ๊ณ ๊ทธ ์์ Map์ value ๊ฐ์ ๋ฃ๊ณ Arrays.sort()์ Collections.reverseOrder()๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์๋ค. ๊ทธ ์ด์ ๋ value๊ฐ์ผ๋ก ์ด์ TreeMap์์ ์๋ ๊ฐ์ ์ฐพ์ ๋ฐฐ์ด์ ๋ฃ์ ๋ ์ญ์์ผ๋ก ๋ค์ด๊ฐ๋๋ก ํ๊ธฐ ์ํจ์ด๋ค. (์คํจ์จ์ด ๋์ ์คํ ์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์คํ ์ด์ง ๋ฒํธ๋ฅผ ๋ด์์ผํ๊ณ , ๋ง์ฝ ์คํจ์จ์ด ๊ฐ์ ์คํ ์ด์ง๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ๋ฒํธ๋ถํฐ ๋ค์ด๊ฐ์ผํ๋ฏ๋ก ์ ๋ ฌ์ด ํ์์ ์ด์๋ค.)
์ด์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด์ sorting[]์ ๋ค์ด์๋ ์คํจ์จ์ ์คํ ์ด์ง ๋ฒํธ๋ก ๋ฐ๊พธ์ด์ฃผ์๋ค. (sorting[i] = j+1;) ์ด ๋, ์ด์ค for๋ฌธ์์ map.get(j+1)๊ณผ sorting[i]์ด ์ผ์นํ๋ ๊ฒฝ์ฐ map์์ key๋ก๋ j+1, value๋ก sorting[i]๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ ์ ๊ฑฐํ๋๋ก ํ์๋ค. ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋ฐ๋ณต๋ฌธ์ด๋ผ์ ์๋ชจ๊ฐ ์ฌํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ j+1์ธ ๋๋ ์ด์ ๋ ์คํ ์ด์ง ๋ฒํธ ๋๋ฌธ์ map์ key ๊ฐ์ 1์ฉ ์ฆ๊ฐ์์ผ ๋ฃ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ , Object[] sorting์ int[] answer๋ก ์ฎ๊ฒจ์ ๋ฐํํ๋ฉด ๋!
'Programmers lv-1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2023.01.03 |
---|---|
๋ฌธ์์ด ๋๋๊ธฐ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2023.01.02 |
์ซ์ ์ง๊ฟ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.27 |
๊ณผ์ผ ์ฅ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (2) | 2022.12.24 |
๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.23 |
์์ฃผํ์ง ๋ชปํ ์ ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.23 |
๋๊ธ