๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
https://school.programmers.co.kr/learn/courses/30/lessons/388351
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ ๋ฌธ์ ์์ฝ

๊ทธ๋ ์์๋ ์ง์๋ค์ด ์ง์ ์ค์ ํ ์ถ๊ทผ ํฌ๋ง ์๊ฐ์ ๋ง์ถฐ ๋ฆ์ง ์๊ฒ ์ถ๊ทผํ๋ฉด ์ํ์ ์ฃผ๋ ์ด๋ฒคํธ๋ฅผ 1์ฃผ์ผ ๋์ ์งํํ๋ ค๊ณ ํ๋ค.
์ด๋ฒคํธ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
1๏ธโฃ ์ถ๊ทผ ์ธ์ ์กฐ๊ฑด
- ๊ฐ ์ง์์ ์ถ๊ทผ ํฌ๋ง ์๊ฐ์ ์ค์ ํ๋ค.
- ์ค์ ํ ์๊ฐ + 10๋ถ ์ด๋ด์ ์ถ๊ทผ ํ๋ฉด ์ ์ ์ถ๊ทผ์ผ๋ก ์ธ์ ๋๋ค.
ex. ์ถ๊ทผ ํฌ๋ง ์๊ฐ์ด 9์ 58๋ถ(958)์ด๋ฉด → 10์ 8๋ถ(1008)๊น์ง ์ถ๊ทผํด์ผ ํ๋ค.
2๏ธโฃ ์ถ๊ทผ ๋ฐ์ดํฐ ํ์
- ์๊ฐ์ ๋ชจ๋ ' ์* 100 + ๋ถ' ์ ์ ์ ํํ๋ก ์ฃผ์ด์ง๋ค.
ex) 958 → 9์ 58๋ถ, 1013 → 10์ 13๋ถ
3๏ธโฃ ๊ธฐํ ์กฐ๊ฑด
- ์ด๋ฒคํธ๋ 1์ฃผ์ผ ๋์ ์งํ๋๋ค.
- ๊ฐ ์ง์์ ์ถ๊ทผ ๊ธฐ๋ก์ 7์ผ์น ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋ค.
- ํ ์์ผ๊ณผ ์ผ์์ผ์ ์ด๋ฒคํธ ํ๊ฐ์์ ์ ์ธ๋๋ค.
- ํ์ผ ์ค ํ๋ฃจ๋ผ๋ ์ง๊ฐํ ์ง์์ ์ํ ์ง๊ธ ๋์์์ ์ ์ธ๋๋ค.
- ์ด๋ฒคํธ๋ startday ์์ผ๋ถํฐ ์์๋๋ค.
ex) 1 → ์์์ผ, 2 → ํ์์ผ, ..., 7 → ์ผ์์ผ
๐ฏ ๋ชฉํ
์ง์๋ค์ ์ถ๊ทผ ํฌ๋ง ์๊ฐ(schedules)๊ณผ ์ค์ ์ถ๊ทผ ์๊ฐ๋ค(timelogs)์ด ์ฃผ์ด์ก์ ๋,
์ด๋ฒคํธ ๊ธฐ๊ฐ ์ค ์ง๊ฐ ์์ด ํ์ผ 5์ผ ๋ชจ๋ ์ ์์ ์ถ๊ทผํ ์ง์์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
๐ก ์์ด๋์ด
1๏ธโฃ ๋ถ ๋จ์๋ก ๋น๊ต๋ฅผ ์ํ ์๊ฐ์ ๋ณํํ๋ค.
- 958 ์ฒ๋ผ ์ซ์๋ก ํํ๋ ์๊ฐ์ ์๊ฐ๊ณผ ๋ถ์ผ๋ก ๋๋ ํ, ์ ์ฒด ์๊ฐ์ ๋ถ ๋จ์๋ก ํ์ฐํ๋ค.
958 → 9์ 58๋ถ → 9 * 60 + 58 = 598๋ถ
์ถ๊ทผ ์ธ์ ์๊ฐ = 598 + 10 = 608๋ถ (10์ 8๋ถ)
2๏ธโฃ ์ด๋ฒคํธ ๊ธฐ๊ฐ ์ค ํ์ผ๋ง ๋น๊ต ๋์์ ํฌํจ์ํจ๋ค.
- startday๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ฒ ์ฃผ์ ํ ์์ผ๊ณผ ์ผ์์ผ์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ๊ตฌํด์ผ ํ๋ค.
startday = 5 (๊ธ์์ผ)์ธ ๊ฒฝ์ฐ
→ index 0: ๊ธ์์ผ
→ index 1: ํ ์์ผ
→ index 2: ์ผ์์ผ
→ index 3: ์์์ผ
...
๐จ ์ฃผ์ ์ฌํญ
์ฌ๊ธฐ์ ์ฃผ์ํด์ผํ ์ ์ด, ์ค์ ๋ ์ง๋ ๋ฐฐ์ด ์ธ๋ฑ์ค 0 ~ 6์ผ๋ก ํํ ๋๋ค๋ ๊ฒ์ด๋ค.
์ฆ, timelogs[i][0]์ ์ด๋ฒคํธ ์ฒซ ๋ ์ถ๊ทผ ๊ธฐ๋ก์ด๊ณ ,
timelogs[i][1]์ ๋์งธ ๋ ์ถ๊ทผ ๊ธฐ๋ก,
timelogs[i][6]์ ๋ง์ง๋ง 7์ผ์ฐจ์ ์ถ๊ทผ ๊ธฐ๋ก์ด๋ค.
ํ์ง๋ง, startday๋ 1~7๋ก ํํ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ถ๋ถ์ ์ ๊ณ ๋ คํด์ ์์ผ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๋งคํํด์ผ ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋๋ ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ํ ์์ผ๊ณผ ์ผ์์ผ์ ์ฐพ์ ์ฃผ์๋ค.
int saturday = (5 - (startday - 1) + 7) % 7;
int sunday = (6 - (startday - 1) + 7) % 7;
๋จผ์ , startday๋ 1 ~ 7๋ก ํํ๋์ง๋ง,
timelogs์์๋ 0~6์ผ๋ก ์ผ์ฃผ์ผ์ ํํํ๊ธฐ ๋๋ฌธ์
(startday - 1)์ ํด์ฃผ์ด์ ํํ ๋ฒ์๋ฅผ 0~6์ผ๋ก ๋ง์ถฐ์ฃผ์๋ค.
์ด๋ ๊ฒ ๋ณํํ๊ณ ๋๋ฉด,
์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์ถ์ ์์ผ์ธ ํ ์์ผ๊ณผ ์ผ์์ผ์ ๊ฐ๊ฐ 5์ 6์ ํด๋นํ๋ฏ๋ก
(5 - (startday - 1))์ ํตํด ์ด๋ฒคํธ ์์์ผ๋ก๋ถํฐ ํ ์์ผ์ด ๋ฉฐ์น ํ์ธ์ง ๊ณ์ฐํ์๊ณ ,
(6 - (startday - 1))์ ํตํด ์ด๋ฒคํธ ์์์ผ๋ก๋ถํฐ ์ผ์์ผ์ด ๋ฉฐ์น ํ์ธ์ง ๊ณ์ฐํ์๋ค.
์ด๋, ํน์๋ ๊ฐ์ด ์์์ผ ์๋ ์์ผ๋ฏ๋ก,
๊ฐ๊ฐ +7์ ํด์ฃผ์ด ๋ฌด์กฐ๊ฑด ์์๋ก ์ฐจ๊ฐ ๋์ฌ ์ ์๋๋ก ๋ง์ถฐ์ฃผ์๋ค.
์ดํ %7์ ํ๋ฉด timelogs์ ์ธ๋ฑ์ค์์๋ ํ ์์ผ๊ณผ ์ผ์์ผ์ด ๋ช ๋ฒ์งธ์ธ์ง ์ ์ ์๋ค.
3๏ธโฃ ์ง์ ๋ณ๋ก ํ์ผ ์ถ๊ทผ ์๊ฐ์ ์ํํ๋ฉฐ ๋น๊ตํ๋ค.
- ๊ฐ ์ง์์ ์ถ๊ทผ ๊ธฐ๋ก (timelogs[i])์ 7์ผ ๊ฐ ์ํํ๋ฉด์, ํ์ผ์๋ ํด๋น ๋ ์ง์ ์ถ๊ทผ ์๊ฐ์ด ์ธ์ ์๊ฐ(ํฌ๋ง์๊ฐ + 10๋ถ)๋ณด๋ค ๋ฆ์ง ์์๋์ง๋ฅผ ํ์ธํด์ค๋ค.
- ์ด๋, ํ๋ฃจ๋ผ๋ ์ง๊ฐํ๋ค๋ฉด, ํด๋น ์ง์์ ์ํ ์ง๊ธ ๋์์์ ์ ์ธํ๋ค.
๐ฉ๐ป๐ป ์ต์ข ์ฝ๋
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int n = schedules.length;
int[] flag = new int[n];
int sunday = (6 - (startday - 1) + 7) % 7;
int saturday = (5 - (startday - 1) + 7) % 7;
int cnt = 0;
for(int i = 0; i < n; i++){
boolean on_time = true;
int work_time = schedules[i];
int work_time_hour = work_time / 100;
int work_time_min = work_time % 100;
int deadline = work_time_hour * 60 + work_time_min + 10;
for(int j = 0; j < 7; j++){
if(j == saturday || j == sunday){
continue;
}
int real_time = timelogs[i][j];
int real_time_hour = real_time / 100;
int real_time_min = real_time % 100;
int real = real_time_hour * 60 + real_time_min;
if(real > deadline){
on_time = false;
}
}
if(on_time){
cnt++;
}
}
return cnt;
}
}
๐ ์๊ฐ ๋ณต์ก๋
์ ๋ ฅ ํฌ๊ธฐ
- ์ง์ ์ = n (1 <= n <= 1000)
- ์ง์ ๋น ์ผ์ฃผ์ผ ๊ธฐ๋ก = 7์ผ
์ฃผ์ ๋ฃจํ
for(int i = 0; i < n; i++) { // ์ง์ ์ ๋งํผ
...
for (int j = 0; j < 7; j++) { // ๊ฐ ์ง์์ 7์ผ ์ถ๊ทผ ๊ธฐ๋ก ๋งํผ
....
}
}
์ด ์ฐ์ฐ๋
- ์ต๋ 1000๋ช * 7์ผ = 7000๋ฒ ๋น๊ต
๐๐ป ์๊ฐ ๋ณต์ก๋๋ O(n) (์ด๋, n์ ์ง์ ์)
(๋จ, ๋ด๋ถ ๊ณ ์ ๋ฃจํ(7์ผ)๋ ์์๋ก ๊ฐ์ฃผํ๋ค.)
'๐ป ์ฝํ > ๐ JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ณต์ (1) | 2025.07.23 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์งํ ์ ๊ธฐ (0) | 2025.07.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋์์ ์ฌ์๊ธฐ (1) | 2025.07.21 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ฐํํ๋ฉด ์ ๋ฆฌ (2) | 2025.05.28 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์๊ฒฉ์์คํ (0) | 2025.05.28 |