1. ๋ฌธ์ ์ค๋ช
ํ๋ก๊ทธ๋๋จธ์ค ํ์์๋ ๊ธฐ๋ฅ ๊ฐ์ ์์
์ ์ํ ์ค์
๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ ์ง๋๊ฐ 100%์ผ ๋ ์๋น์ค์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋, ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๋๋ ๋ชจ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์ ์๋ ๊ธฐ๋ฅ์ด ์์ ์๋ ๊ธฐ๋ฅ๋ณด๋ค ๋จผ์ ๊ฐ๋ฐ๋ ์ ์๊ณ , ์ด๋ ๋ค์ ์๋ ๊ธฐ๋ฅ์ ์์ ์๋ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ ๋ ํจ๊ป ๋ฐฐํฌ๋ฉ๋๋ค.
๋จผ์ ๋ฐฐํฌ๋์ด์ผ ํ๋ ์์๋๋ก ์์
์ ์ง๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด progresses์ ๊ฐ ์์
์ ๊ฐ๋ฐ ์๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด speeds๊ฐ ์ฃผ์ด์ง ๋ ๊ฐ ๋ฐฐํฌ๋ง๋ค ๋ช ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๋์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- ์์ ์ ๊ฐ์(progresses, speeds๋ฐฐ์ด์ ๊ธธ์ด)๋ 100๊ฐ ์ดํ์ ๋๋ค.
- ์์ ์ง๋๋ 100 ๋ฏธ๋ง์ ์์ฐ์์ ๋๋ค.
- ์์ ์๋๋ 100 ์ดํ์ ์์ฐ์์ ๋๋ค.
- ๋ฐฐํฌ๋ ํ๋ฃจ์ ํ ๋ฒ๋ง ํ ์ ์์ผ๋ฉฐ, ํ๋ฃจ์ ๋์ ์ด๋ฃจ์ด์ง๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋์จ์ด 95%์ธ ์์ ์ ๊ฐ๋ฐ ์๋๊ฐ ํ๋ฃจ์ 4%๋ผ๋ฉด ๋ฐฐํฌ๋ 2์ผ ๋ค์ ์ด๋ฃจ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ 93% ์๋ฃ๋์ด ์๊ณ ํ๋ฃจ์ 1%์ฉ ์์
์ด ๊ฐ๋ฅํ๋ฏ๋ก 7์ผ๊ฐ ์์
ํ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ ๋ฒ์งธ ๊ธฐ๋ฅ์ 30%๊ฐ ์๋ฃ๋์ด ์๊ณ ํ๋ฃจ์ 30%์ฉ ์์
์ด ๊ฐ๋ฅํ๋ฏ๋ก 3์ผ๊ฐ ์์
ํ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์ด์ ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ด ์์ง ์์ฑ๋ ์ํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๋ 7์ผ์งธ ๋ฐฐํฌ๋ฉ๋๋ค.
์ธ ๋ฒ์งธ ๊ธฐ๋ฅ์ 55%๊ฐ ์๋ฃ๋์ด ์๊ณ ํ๋ฃจ์ 5%์ฉ ์์
์ด ๊ฐ๋ฅํ๋ฏ๋ก 9์ผ๊ฐ ์์
ํ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ 7์ผ์งธ์ 2๊ฐ์ ๊ธฐ๋ฅ, 9์ผ์งธ์ 1๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ฉ๋๋ค.
2. ์ ๊ทผ๋ฐฉ์
2-1. ๋ฌธ์ ๋จ์ํ
๊ฐ ๊ธฐ๋ฅ์ด 100ํ๋ก ์์ฑ๋์์ ๋ ๋ฐฐํฌ๊ฐ๋ฅ, ์์ ์๋ ๊ธฐ๋ฅ์ด ์๋ฃ๋์ง ์์ผ๋ฉด ๋ค์ ์๋ ๊ธฐ๋ฅ์ด ๋จผ์ ์๋ฃ๋๋๋ผ๋ ๊ธฐ๋ค๋ ค์ผ ํจ.
๊ฐ ๋ฐฐํฌ๋ง๋ค ํ ๋ฒ์ ๋ช ๊ฐ์ ๊ธฐ๋ฅ์ด ๋๊ฐ๋์ง ๊ณ์ฐํ๊ธฐ
๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ด ์๋ฃ๋๊ธฐ๊น์ง ๋ฉฐ์น ๊ฑธ๋ฆฌ๋์ง ๊ณ์ฐ(์์
์ผ์)
๊ฐ์ด ๋๊ฐ ์ ์๋ ๊ธฐ๋ฅ ๋ฌถ๊ธฐ(๋ฐฐํฌ ์์ )
=> ๊ฒฐ๊ณผ : ํ ๋ฒ์ ๋ช ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๋์ง ๊ณ์ฐ
โ
์์
์ผ์
- ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ด 100ํ๋ก๊ฐ ๋๋ ค๋ฉด (100 - 93) / 1 = 7 ์ผ
- ๋ ๋ฒ์งธ ๊ธฐ๋ฅ์ (100 - 30) / 30 = 2.xx ์ผ = 3 ์ผ (์ฌ๋ฆผ)
- ์ธ ๋ฒ์งธ ๊ธฐ๋ฅ์ (100 - 55) / 5 = 9 ์ผ
- ๋ฐ๋ผ์ ์์
์ผ์ ๊ณ์ฐ์ Math.ceil((100 - progress[i]) / speeds[i])
โ ๋ฐฐํฌ ์์
- ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ 7์ผ์งธ์ ์๋ฃ๋๋ค.
- ๋ ๋ฒ์งธ ๊ธฐ๋ฅ์ 3์ผ ๋ง์ ์ค๋น๋์ง๋ง, ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ด ์์ง ์ค๋น๋์ง ์์๊ธฐ ๋๋ฌธ์ 7์ผ์งธ์ ๊ฐ์ด ๋๊ฐ๋ค.
- ์ธ ๋ฒ์งธ ๊ธฐ๋ฅ์ 9์ผ์งธ์ ์ค๋น๋๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ๋ฐฐํฌ๊ฐ ๋๋ ํ, 9์ผ์งธ์ ๋ฐ๋ก ๋๊ฐ๋ค.
โ ๊ฒฐ๊ณผ
- ์ฒซ ๋ฒ์งธ ๋ฐฐํฌ๋ ๋ ๊ฐ์ ๊ธฐ๋ฅ [93, 30]
- ๋ ๋ฒ์งธ ๋ฐฐํฌ๋ ํ ๊ฐ์ ๊ธฐ๋ฅ [55]
- ๋ฐ๋ผ์ ๋ฆฌํดํ ๊ฐ์ [2, 1]
2-2. ํด๊ฒฐ๋ฒ
๋ช
์์ด ์คํ/ํ ๋ฌธ์ ์ด๋ฏ๋ก ํ๋ก ํ์ด ์ค๋ค. ์ฌ๊ธฐ์ ํ(Queue)๋ฅผ ์ฐ๋ ์ด์ ๋ ๋ฌธ์ ์์ ๊ธฐ๋ฅ๋ค์ ์์๋๋ก ๋ฐฐํฌํด์ผ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋จผ์ ์์
๋ ๊ธฐ๋ฅ์ด ๋จผ์ ์ฒ๋ฆฌ๋๊ณ , ๋์ค์ ์์
๋ ๊ธฐ๋ฅ์ ๋ค์ ์ฒ๋ฆฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์
์ ์ถ(FIFO)๊ตฌ์กฐ์ธ ํ(Queue)๋ฅผ ์ด์ฉํ๋ค.
1. ๊ฐ ์์
์ด ์๋ฃ๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์ผ์๋ฅผ ๊ณ์ฐํด์ Queue์ ์ ์ฅ
2. ํ๊ฐ ๋น์ด ์์ง ์์ ๋์ loop๋ฅผ ๋๋ฆฌ๋ฉฐ ์๋ ์์
๋ฐ๋ณต
3. ๋ฐฐํฌ ๊ทธ๋ฃน์ ๊ธฐ์ค์ด ๋๋ ์ต๋ ์๋ฃ ์ผ์๋ฅผ ๋ํ๋ด๋ ๋ณ์ currentMax ์ ์ธํด ์ฃผ๊ณ ์ฒซ ๋ฒ์งธ ์์
์ ์๋ฃ ์ผ์๋ฅผ ๋ด์ ์ค๋ค. ์ด ๊ฐ๋ณด๋ค ๋ฆ๊ฒ ์๋ฃ๋๋ ์์
์ ์ด๋ฒ ๋ฐฐํฌ์ ํฌํจ๋์ง ์๊ณ , ์ด ๊ฐ ์ดํ๋ก ์๋ฃ๋๋ ์์
๋ค๋ง ํจ๊ป ๋ฐฐํฌ.
4. ํ์ฌ ๋ฐฐํฌ์์ ๊ฐ์ด ๋ฐฐํฌ๋๋ ๊ธฐ๋ฅ์ ๊ฐ์๋ฅผ ์ธ๋ ๋ณ์ cnt = 1 ๋ก ์ด๊ธฐํ
5. workDays.peek()์ผ๋ก ํ์ ๋งจ ์์ ์๋ ๊ฐ์ด currentMax๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๊ทธ ์์
์ ์ด๋ฒ ๋ฐฐํฌ์ ํฌํจ๋์ด์ผ ํจ.
6. ํ์ฌ ๋ฐฐํฌ๊ฐ ๋๋๋ฉด ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ cnt ๊ฐ์ ๋ด์ ์ฃผ๊ธฐ
7. ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ ํ return
3. ๋ฌธ์ ํ์ด
poll()์ ํ์ ๋งจ ์์ ์๋ ์์๋ฅผ ๋ฐํํ๊ณ ์ ๊ฑฐ ํจ.
peek()์ ์์๋ฅผ ๋ฐํํ์ง๋ง ์ ๊ฑฐ ํ์ง๋ ์๋๋ค.
์? ์ฒซ๋ฒ์งธ๋ก ์ ์ถํ ์ฝ๋๊ฐ ํ๋ ธ๋ค๊ณ ํ๋ค..
ํ๋ฆฐ ์ฝ๋
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
Queue<Integer> workDays = new LinkedList<>();
// ๊ฐ ์์
์ด ์๋ฃ๋๊ธฐ๊น์ง ํ์ํ ์ผ์๋ฅผ ๊ณ์ฐํ์ฌ ํ์ ์ถ๊ฐ
for (int i = 0; i < progresses.length; i++) {
// ์ฒซ ๋ฒ์งธ ์์
์ ์๋ฃ ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์
int days = (int) Math.ceil((100 - progresses[i]) / speeds[i]);
// ํ์ฌ ๋ฐฐํฌ์ ํฌํจ๋ ๊ธฐ๋ฅ์ ์ ์ด๊ธฐํ
workDays.add(days);
}
// ๋ฐฐํฌ ์ฒ๋ฆฌ
while(!workDays.isEmpty()) {
int currentMax = workDays.poll();
int cnt = 1;
// ๊ธฐ์ค์ผ(currentMax)๋ณด๋ค ๋นจ๋ฆฌ ๋๋๋ ์์
์ ํจ๊ป ๋ฐฐํฌ
while(!workDays.isEmpty() && workDays.peek() <= currentMax) {
workDays.poll(); // ์์
์ ๊ฑฐ
cnt++; // ๋ฐฐํฌ ์ ์ฆ๊ฐ
}
// ํ์ฌ ๋ฐฐํฌ์ ํฌํจ๋ ๊ธฐ๋ฅ์ ์ ์ถ๊ฐ
answer.add(cnt);
}
// ArrayList -> int[]๋ก ๋ณํ
return answer.stream().mapToInt(i -> i).toArray();
}
}
๋ง ๊ทธ๋๋ก 90์ ์ง๋ฆฌ ์ฝ๋ ์ด๋๊ฐ ํ๋ ธ์ง?
์.... int days = (int) Math.ceil((100-progresses[i]) / speeds[i]); ๋ถ๋ถ์ด ํ๋ ธ๋ค.
๋ง๋ ์ฝ๋๋ int days = (int) Math.ceil((100.0-progresses[i]) / speeds[i]);
์ ์ ๋๋์
์ด๋ ์ค์ ๋๋์
ํ์ ๋ Math.ceil ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ...
๋ด๊ฐ ์ฒ์ ์ด ์ฝ๋์์ (100 - progresses[i]) / speeds[i] ์ ์ ์๋ผ๋ฆฌ์ ๋๋์
์ผ๋ก ๋ ์ ์๋ฅผ ๋๋๋ฉด ๊ฒฐ๊ณผ๋ ์ ์์ด๊ณ , ์์์ ์ดํ์ ๊ฐ์ ๊ทธ๋ฅ ๋ฒ๋ ค์ง๋ค. ๋ฐ๋ฉด, Math.ceil()์ ์ค์(double)๋ก ๊ณ์ฐ๋ ๊ฐ์ ์ฌ๋ฆผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ ๊ทผ์ํ ์ฐจ์ด๊ฐ ์๊ธด๋ค.
๊ทธ๋์ 100 ๋์ 100.0์ ์ฌ์ฉํ์ฌ ์ค์ ๋๋์
์ ํ๋ ๊ฒ์ด ์ ํํ๋ค. ์ค์ ๋ก ์ฝ๋๋ฅผ ๋๋ ค ๋ณด์์ ๋๋ ํ
์คํธ ์ผ์ด์ค 10๊ฐ๋ ํต๊ณผํ์ผ๋ ํ๊ฐ๋ ํต๊ณผํ์ง ๋ชปํ ๊ฑธ๋ก ๋ด ์ด ๋ถ๋ถ์ ๊ณ ๋ คํด์ ๋ฌธ์ ๋ฅผ ๋ธ ๊ฒ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, 100 - 95 = 5์ด๊ณ , speeds[i] = 2์ผ ๊ฒฝ์ฐ
์ ์ ๋๋์
: 5 / 2๋ 2 (์์์ ์ดํ ๋ฒ๋ฆผ)
์ค์ ๋๋์
: 5.0 / 2 = 2.5 → Math.ceil(2.5)๋ 3 (์ ํํ ์ฌ๋ฆผ)
์ ๋ต ์ฝ๋
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
Queue<Integer> workDays = new LinkedList<>();
// ๊ฐ ์์
์ด ์๋ฃ๋๊ธฐ๊น์ง ํ์ํ ์ผ์๋ฅผ ๊ณ์ฐํ์ฌ ํ์ ์ถ๊ฐ
for (int i = 0; i < progresses.length; i++) {
// ์ฒซ ๋ฒ์งธ ์์
์ ์๋ฃ ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์
int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
// ํ์ฌ ๋ฐฐํฌ์ ํฌํจ๋ ๊ธฐ๋ฅ์ ์ ์ด๊ธฐํ
workDays.add(days);
}
// ๋ฐฐํฌ ์ฒ๋ฆฌ
while(!workDays.isEmpty()) {
int currentMax = workDays.poll();
int cnt = 1;
// ๊ธฐ์ค์ผ(currentMax)๋ณด๋ค ๋นจ๋ฆฌ ๋๋๋ ์์
์ ํจ๊ป ๋ฐฐํฌ
while(!workDays.isEmpty() && workDays.peek() <= currentMax) {
workDays.poll(); // ์์
์ ๊ฑฐ
cnt++; // ๋ฐฐํฌ ์ ์ฆ๊ฐ
}
// ํ์ฌ ๋ฐฐํฌ์ ํฌํจ๋ ๊ธฐ๋ฅ์ ์ ์ถ๊ฐ
answer.add(cnt);
}
// ArrayList -> int[]๋ก ๋ณํ
return answer.stream().mapToInt(i -> i).toArray();
}
}
4. ๊ฐ์ ์ ํ ๋ฌธ์ (์คํ/ํ)
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ฃผ์๊ฐ๊ฒฉ (์คํ/ํ)
๐ 1. ๋ฌธ์ ์ค๋ช ๐ก 2. ์ ๊ทผ๋ฐฉ์์ด์คfor๋ฌธํ์ฌ ์ธ๋ฑ์ค์ ์๋ ์์๊ณผ ์ดํ ๋ชจ๋ ๊ฐ์ ๋น๊ตํ๋ฉด์ ํ์ฌ ์์๊ฐ ๋น๊ตํ๊ณ ์๋ ์์๋ณด๋ค ์ปค์ง๋ฉด break;๋ฅผ ๊ฑธ์ด์ค๋ค. ๊ทธ ์ ๊น์ง๋ answer[i]++์ ํด ์ค๋ค.
awesomepossum.tistory.com
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (์คํ/ํ)
๐ 1. ๋ฌธ์ ์ค๋ช ๐ก 2. ์ ๊ทผ๋ฐฉ์ Queueํธ๋ญ ์ง์ ๋ก์ง: ๋ค๋ฆฌ์ ๋งจ ์ ํธ๋ญ์ด ๋๊ฐ๊ณ ์๋ก์ด ํธ๋ญ์ด ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ ์๋์ง ํ์ธํ ํ ๋ค๋ฆฌ์ ์ถ๊ฐ์ด๋์๊ฐ: ํธ๋ญ์ด ๋ค๋ฆฌ ์์ ์ค๋ฅด๋ฉด ๋งค 1์ด๋ง๋ค
awesomepossum.tistory.com
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ํ๋ก์ธ์ค ๋ฌธ์ ํ์ด (์คํ/ํ)
1. ๋ฌธ์ ์ค๋ช ์์ #1๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค. ์์ #26๊ฐ์ ํ๋ก์ธ์ค [A, B, C, D, E, F]๊ฐ ๋๊ธฐ ํ์ ์๊ณ ์ค์๋๊ฐ [1, 1, 9, 1, 1, 1] ์ด๋ฏ๋ก [C, D, E, F, A, B] ์์ผ๋ก ์คํ๋ฉ๋๋ค. ๋ฐ๋ผ์ A๋ 5๋ฒ์งธ๋ก ์ค
awesomepossum.tistory.com
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์ ํ์ด (์คํ/ํ)
1. ๋ฌธ์ ์ค๋ช 2. ์ ๊ทผ๋ฐฉ์1) ์คํ์ ์ฌ์ฉํ์ง ์๊ณ ํ๊ธฐ๋ฌธ์์ด์ ์ํํ๋ฉฐ ๋ซํ ๊ดํธ์ ์ด๋ฆฐ ๊ดํธ์ ๊ฐฏ์๋ฅผ ๋ณ์์ ์ ์ฅํ๊ณ ๊ฐ์๊ฐ ๊ฐ์ผ๋ฉด true, ํ๋ฆฌ๋ฉด false ๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ 2) ์คํ์ ์ฌ์ฉํ์ฌ
awesomepossum.tistory.com
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๊ฐ์ ์ซ์๋ ์ซ์ด ๋ฌธ์ ํ์ด (์คํ/ํ)
1. ๋ฌธ์ ์ค๋ช ๋ฐฐ์ด arr๊ฐ ์ฃผ์ด์ง๋๋ค. ๋ฐฐ์ด arr์ ๊ฐ ์์๋ ์ซ์ 0๋ถํฐ 9๊น์ง๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ด๋, ๋ฐฐ์ด arr์์ ์ฐ์์ ์ผ๋ก ๋ํ๋๋ ์ซ์๋ ํ๋๋ง ๋จ๊ธฐ๊ณ ์ ๋ถ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค. ๋จ, ์ ๊ฑฐ
awesomepossum.tistory.com