ํฐ์คํ ๋ฆฌ ๋ทฐ
[์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค - ๋์คํฌ ์ปจํธ๋กค๋ฌ 1๋ถ
Nickolodeon 2022. 12. 8. 00:39๐ก Introduction
์ฐ์ ์ง๊ด์ ์ผ๋ก ๋ฌธ์ ์ค๋ช ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ง๋ณธ๋ค. ์ดํ ๋ฆฌํฉํ ๋ง์ ์งํํ๋ค.
๐ข ๋ฌธ์ ์ค๋ช ์์ฝ
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 3 ๋ฌธ์ ๋ก, ํ ๋ฒ์ ํ๋์ ์ผ๋ง ์ฒ๋ฆฌํ ์ ์๋ ๋์คํฌ ์ปจํธ๋กค๋ฌ์ ์์ ์๊ฐ์ด ๋ค์ํ ์์ฒญ๋ค์ด ๊ฐ๊ฐ ๋ค๋ฅธ ์๊ฐ์ ๋ค์ด์ฌ ๋, ๊ฐ ์์ ์ ์ด๋ค ์์๋ก ์ฒ๋ฆฌํด์ผ ์์ฒญ๋ ์์ ๋ค์ด ํ๊ท ๋๊ธฐ ์๊ฐ์ ์ต์๋ก ๊ฐ์ง ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ Hint
ํ๊ท ์ด ์ต์๋ผ๋ ๊ฒ์ ๊ฒฐ๊ตญ ํฉ์ด ์ต์๋ผ๋ ์๋ฏธ์ด๋ค. ํฉ์ ์ต์ํํ๋ ๋ฐ์ ์ง์คํด๋ณด์.
ํฉ์ด ์ต์ํ๋๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ฐ์ ๋์คํฌ ์ปจํธ๋กค๋ฌ์ ๋์ ์๋ฆฌ์ ๋ํด์ ์ ํ์๊ฐ ์๋ค. ๋์คํฌ ์ปจํธ๋กค๋ฌ๋ ๋ ๊ฐ์ง ์ผ์ ๋ฐ๋ณตํด์ ํ๋ค:
- ๋ชจ๋ ์์ฒญ๋ค์ ๋์ด
- ์์ฒญ ํ๋๋ฅผ ์ ํํด ์ฒ๋ฆฌ
์ด ๋ฐ๋ณต๋๋ ๋์๋ค ์ค 1๋ฒ ์์ฒญ ๋์ด ์์ ๊ฐ ์์ฒญ๋ค๋ณ๋ก ํ์ฌ์ ์์ ์์ ์์ฒญํ์ ๋ ์์ฒญ ์์ ์์ ~ ์์ฒญ ์๋ฃ ์์ ์ ์๊ฐ์ ๊ตฌํด ๋์ดํ๋ค. ๊ทธ๋ฆฌ๊ณ 2๋ฒ ์์ฒญ ํ๋ ์ ํ ์์ ์ต์๋ฅผ ๋จผ์ ์ ํํ๋๋ก ํ๋ค.
์์
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด jobs ๊ฐ ์๋ค: [[0, 3], [1, 9], [2, 6]]
์ด ๋ฐฐ์ด์ ๋ํด์ ์์์ ์๊ฐํด ๋ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๋์ํ ๊ฒ์ด๋ค.
์์.
1๋ฒ ๊ณผ์ :
1 - 1. ๋์คํฌ ์ปจํธ๋กค๋ฌ์ ์์น๋ฅผ pos ์ด๋ผ๊ณ ํ๊ฒ ๋ค. ์ฒ์ ์์ ํ pos = 0 ์ด๋ค.
- A ์์
: [(์์์ ) 0, (์์ ์๊ฐ) 3]
- A ์์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ์๊ฐ + ์์ ์๊ฐ = 0 - 0 + 3 = 3 ์ด๋ค.
- B ์์
: [(์์์ ) 1, (์์ ์๊ฐ) 9]
- B ์์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ์๊ฐ + ์์ ์๊ฐ = 0 - 1 + 9 = 8 ์ด๋ค.
- C ์์
: [(์์์ ) 2, (์์ ์๊ฐ) 6]
- C ์์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ์๊ฐ + ์์ ์๊ฐ = 0 - 2 + 6 = 4 ์ด๋ค.
1 - 2. A ์์ ์ ์ฒ๋ฆฌํ๋ค. pos = 3 ์ด๋ค. ํ์ฌ๊น์ง ์ด ์ฒ๋ฆฌ ์๊ฐ์ 3 ์ด๋ค.
๐ Note
๋ฌผ๋ก ์ฒซ ๊ณผ์ ์์ 0์์ ์์ํ๋ ์์ฒญ์ด ์๋ค๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ์์ฒญ์ด๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๊ฐ์ ์๊ด์์ด ์์์ ์ด 0์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
2๋ฒ ๊ณผ์ :
...
N๋ฒ ๊ณผ์ :
๋.
์์์ ์์ธํ๊ฒ ์ค๋ช ํ์ง๋ ์์์ง๋ง, 1๋ฒ ๊ณผ์ ์ ์งํํ๊ณ ๋์ ์ดํ 2๋ฒ๋ถํฐ N ๋ฒ๊น์ง์ ๊ณผ์ ์์๋ (N์ ๋ฌผ๋ก jobs ๋ฐฐ์ด ๋ด์ ๋ฐฐ์ด์ ์์ด๋ค, ์ฆ jobs.length ์ด๋ค.) 1 - 1 ๊ณผ 1 - 2 ์ ๋์์ ๋ฐ๋ณตํ๋ค. ์ด๋ฅผ ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ์๋์ ๊ฐ๋ค:
public int totalAboveAll(int[][] jobs) {
int count = 0;
int current = 0;
List<Integer> minIndices = new ArrayList<>();
int pos = 0;
int min = 9999;
int minIdx = -1;
while (jobs.length > count) { // ์์ ์๊ฐ์ ํ์
ํ๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก, ์์
์ ๊ฐ์๋ณด๋ค ๋ฐ๋ณต ํ์๊ฐ ์ ์ ํ ๊ณ์ ๋ฐ๋ณต๋๋ค. ๋ง์ง๋ง์๋ ์ด ์์ ์๊ฐ์ด ๊ตฌํด์ง๋ค.
for(int i = 0; i < jobs.length; i++) { // ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐํ๋ ์์
๋ค ๊ฐ๊ฐ์ ๋ํด,
//TODO: ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์์
์ ํ์
์์ ์ ์ธํ๋ค.
if (minIndices.contains(i)) continue; // ์ด๋ฏธ ์ฒ๋ฆฌํ ์์
์ ํ์ธํ์ง ์๋๋ค.
int duration = pos - jobs[i][0] + jobs[i][1]; // ์ง๊ธ ํ์
๋ ์ฒ๋ฆฌ ๊น์ง ๋๊ธฐ ์๊ฐ์ด ์ผ๋ง๋ ๋๋์ง ํ์ธํ๊ณ ,
if (duration < min) { // ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฒ์ ์ฐพ๋๋ค.
min = duration;
minIdx = i; // ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์ ์ ์์
์ ๋ฐฐ์ด ๋ด์์์ ์ธ๋ฑ์ค๋ฅผ ํ์
ํ๋ค.
}
}
pos += jobs[minIdx][1]; // ํ์
๋ ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์์
์ ์ฒ๋ฆฌํ ์ดํ์ ์์น๋ก ์ฎ๊ธด๋ค.
current += min; // ํ์ฌ๊น์ง์ ์์ ์๊ฐ์ ํ์
ํ๋ค.
count++; // ๋ช ๊ฐ์ ์์
์ ์ฒ๋ฆฌํ๋์ง ์ผ๋ค.
//TODO: ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์์
์ ํ์
์์ ์ ์ธํ๋ค.
minIndices.add(minIdx);
min = 99;
} // ์ด ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์ค๋ฉด ์ฒ๋ฆฌํด์ผ ํ ์์
๋ค์ ๋ชจ๋ current ์ ๋์ ํด ๋ํ ์ํ๋ก ๋น ์ ธ๋์จ๋ค.
return current;
}
ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋์์ ๋ฐ๋ณตํ๋ฉด์ ์์๋๋ก ๊ฒฐ์ ์ ๋ด๋ฆด ๊ฒ์ด๊ณ , ๊ฐ ์์ ์ ํ๋จ์์๋ง ์ต์ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ ์ ์ ํํ๋ฏ๋ก ๊ฐ ์์ ์์์ ์ต์๋ ์ด ํฉ์ ์ต์๋ก ๋ง๋ ๋ค๋ ๋ณด์ฅ์ ํ๋ ๊ฒ์ ์๋๋ค. ์ฆ, ๊ฐ ์์ ์์ ์ต์๋ฅผ ๋ชจ๋ ์ ํํด๋ ํฉํ์ ๋ ์ต์๊ฐ ์๋ ์๋ ์๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
jobs = [[0, 16],[0, 14],[15, 1],[13, 13]] ์ผ ๋,
์ต์ ํฉ์ [0,16] -> [15, 1] -> [13, 13] -> [0, 14] ์์๋๋ก ์ฒ๋ฆฌํ์ ๋์ ๊ฒฐ๊ณผ์ธ
16 + 2 + 17 + 44 = 79 ์ด๋ค.
ํ์ง๋ง ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋งค๋ฒ ์ต์ ์ฒ๋ฆฌ ์๊ฐ์ ์์ฒญ์ ์ ํํ๋ฏ๋ก
[0, 14] -> [13, 13] -> [15, 1] -> [0, 16] ์์ผ๋ก ์ฒ๋ฆฌํด
14 + 14 + 13 + 44 = 85 ์ด๋ค.
79 < 85 ์ด๋ฏ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํฉ์ ์ฐพ๋๋ฐ์ ์คํจํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํด๋ด์ผํ๋ ๊ฒ์ผ๊น?
๋ค์ ์๊ฐ์๋ ์ด๋ค ๋ฐฉ๋ฒ์ ํ์ฉํ ์ ์๋์ง ์์๋ณธ๋ค.
์ถ์ฒ
https://school.programmers.co.kr/learn/courses/30/lessons/42627
'Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ธฐ์ง๊ตญ ์ค์น (1) | 2022.12.17 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] Longest Common Subsequence(LCS) - 1๋ถ (0) | 2022.12.09 |
[์๊ณ ๋ฆฌ์ฆ] Dijkstra's algorithm 2๋ถ - ๊ตฌํ ์ค๋น (0) | 2022.12.05 |
[์๊ณ ๋ฆฌ์ฆ] Dijkstra's algorithm 1๋ถ - ์ด๋ก (0) | 2022.12.04 |
[์๊ณ ๋ฆฌ์ฆ] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (0) | 2022.12.03 |
- Total
- Today
- Yesterday
- Java Data Types
- ์๊ณ ๋ฆฌ์ฆ
- N+1
- ์ฝํ
- json web token
- LazyInitializationException
- JPA
- docker
- DeSerialization
- JOIN FETCH
- ์ค์๊ฐ๋ฐ์ดํฐ
- ๊ฐ์ ์๋ฒ
- ์ธ์ฆ/์ธ๊ฐ
- ์ญ์ง๋ ฌํ
- DTO
- JPQL
- ci/cd
- @RequestBody
- google cloud
- ๊ธฐ์ง๊ตญ ์ค์น
- ๊น๋ฉ
- gitlab
- ํ๋ก๊ทธ๋๋จธ์ค
- Firebase
- Jackson
- FCM
- Spring Boot
- ์ง์ฐ ๋ก๋ฉ
- spring
- ๋์ปค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |