๐ 1. ๋ฌธ์ ์ค๋ช
![](https://blog.kakaocdn.net/dn/b7mAXk/btsMhw5qR60/ttfqYKtryna6dVerIqjGQ1/img.png)
![](https://blog.kakaocdn.net/dn/m58ws/btsMflqYOYQ/bswlDFoC2xxIfVHbKnGFj0/img.png)
๐ก 2. ์ ๊ทผ๋ฐฉ์
1. ํ์ผ ์ฒดํฌ
startday๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ผ(์~๊ธ)์ ์ธ๋ฑ์ค๋ฅผ isWeekday ๋ฐฐ์ด์ ์ ์ฅํ๋ค. (ํ๋ฆผ) - ์ธ๋ฑ์ค๊ฐ ๊ณ ์ ๋จ- startday + j๋ฅผ ํตํด ํ์ฌ ์์ผ์ ์ง์ ๊ณ์ฐํด์ startday์ ๋ฐ๋ผ ์์ผ์ด ๋์ ์ผ๋ก ๋ณํ๊ฒ ํด์ผ ํ๋ค.
- % 7 ์ฐ์ฐ์ผ๋ก ์๊ธ(15)๋ง ๊ฒ์ฌํ๊ณ ์ฃผ๋ง(0,6)์ ์ถ๊ทผ์๊ฐ ์ฒดํฌ์์ ์ ์ธํ๋๋ก ํ๋ค.
2. ์ง์๋ณ ์ถ๊ทผ ๊ธฐ๋ก ํ์ธ
- schedules[i] + 10์ ๊ธฐ์ค์ผ๋ก ํ์ผ์ ์ถ๊ทผ ๊ธฐ๋ก์ ํ์ธํ๋ค. - ์ด ๋ ์๊ฐ์ด 60๋ถ์ด ๋์ด๊ฐ๋ ๊ฒฝ์ฐ +40์ ํด์ HHMM๋ง๊ฒ ์๊ฐ์ด ํ์๋ ์ ์๋๋ก ์ ํํ ์๊ฐ ๋ณด์ ์ ํด ์ค๋ค.
- ํ๋๋ผ๋ ์ง๊ฐํ ๊ฒฝ์ฐ(์ถ๊ทผ ์๊ฐ > ์ธ์ ์๊ฐ), ํด๋น ์ง์์ ์ํ์ ๋ฐ์ ์ ์๋ค.
- ๋ชจ๋ ํ์ผ์ ์ง๊ฐํ์ง ์์๋ค๋ฉด ์นด์ดํธํ๋ค.
๐
๐ปโ ์ฒซ ์๋ ์คํจ
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int n = schedules.length;
int count = 0;
// ํ์ผ(์~๊ธ)์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ (0-based ๊ทธ๋ฆฌ๊ณ 0๋ฒ ์ธ๋ฑ์ค๋ ์์์ผ)
boolean[] isWeekday = new boolean[7];
int firstWeekday = (startday - 1) % 7;
for (int i = 0; i < 7; i++) {
isWeekday[(firstWeekday + i) % 7] = true;
}
// ์ง์๋ณ ์ฒดํฌ
for (int i = 0; i < n; i++) {
int targetTime = schedules[i] + 10;
boolean allOnTime = true;
for (int j = 0; j < 7; j++) {
if (isWeekday[j] && timelogs[i][j] > targetTime) {
allOnTime = false;
break; // ์ฃผ๋ง (ํ ์ผ)์ ์ถ๊ทผ์๊ฐ ๊ฒ์ฌ ์ํด๋ ๋๋๊น
}
}
if (allOnTime) count++;
}
return count;
}
}
![](https://blog.kakaocdn.net/dn/r2cPE/btsMfigIrhg/PgGX6bTxBX8O28vTChyeuK/img.png)
๐
๐ปโ ๋ ๋ฒ์งธ ์๋ ์คํจ
์๊ฐ ํ์์ ๊ณ ๋ คํ์ง ์์
ํ์ฌ ์๊ฐ์ด HHMM ํ์์ผ๋ก ์นด์ดํ
๋๊ธฐ ๋๋ฌธ์ ์ถ๊ทผ ํฌ๋ง ์๊ฐ +10 ํ ํ, 60๋ถ์ด ๋์ด๊ฐ๋ฉด +40์ ์ถ๊ฐํ์ฌ ์ฌ๋ฐ๋ฅธ ์๊ฐ์ ์ ์งํ๋ plusTime ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์๋ค.
์๋ฅผ ๋ค๋ฉด plusTime(1055) ์ผ ๋, 1055 + 10 = 1065 ์ด์ง๋ง '65๋ถ'์ ์๊ฐ์ ์ฝ๋ ์ฌ๋ฐ๋ฅธ ํํ์ด ์๋๊ธฐ ๋๋ฌธ์ +40์ ์ถ๊ฐํ์ฌ 1065 โ 1105๋ก ๋ณํํ๋ค. ๊ทธ๋ผ 10์ 65๋ถ ๋์ 11์ 05๋ถ์ผ๋ก ์ฌ๋ฐ๋ฅธ ํ์์ด ๋๋ค.
ํ์ง๋ง ์ด ์ฝ๋๋ ์ฒซ ๋ฒ์งธ ์ผ์ด์ค๋ ํต๊ณผํ์ง ๋ชปํจ.
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int n = schedules.length;
int count = 0;
// ํ์ผ(์~๊ธ)์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ
boolean[] isWeekday = new boolean[7];
int firstWeekday = (startday - 1) % 7;
for (int i = 0; i < 7; i++) {
isWeekday[(firstWeekday + i) % 7] = true;
}
// ์ง์๋ณ ์ฒดํฌ
for (int i = 0; i < n; i++) {
int targetTime = plusTime(schedules[i]);
boolean allOnTime = true;
for (int j = 0; j < 5; j++) {
if (isWeekday[j] && timelogs[i][j] > targetTime) {
allOnTime = false;
break;
}
}
if (allOnTime) count++;
}
return count;
}
public int plusTime(int time) {
time += 10;
if (time % 100 >= 60) {
time += 40;
}
return time;
}
}
๋ฌธ์ ๋ฐ์ ๋ถ๋ถ
for (int i = 0; i < n; i++) {
int targetTime = moreTime(schedules[i]);
boolean allOnTime = true;
for (int j = 0; j < 7; j++) { // โ ๋ฌธ์ ๋ฐ์ ๋ถ๋ถ
if (isWeekday[j] && timelogs[i][j] > targetTime) {
allOnTime = false;
break;
}
}
if (allOnTime) count++;
}
โ for (int j = 0; j < 7; j++) ์ฌ์ฉ j=0๋ถํฐ ์ผ์์ผ์ ๊ฒ์ฌํ๋ฏ๋ก, startday๊ฐ ๋ฐ์๋์ง ์์ โ ์์ผ ์ค๋ฅ ๋ฐ์
- timelogs[i][j]์ j๊ฐ ๋ฌด์กฐ๊ฑด 0~6์ผ๋ก ๊ณ ์ ๋จ
- ]timelogs[i][j]์์ j=0~6๊น์ง ์ ์ฒด ์ํํ๋ฉด, startday์ ๋ฐ๋ฅธ ์์ผ ๋ณด์ ์ด ์์
- ์ฆ, timelogs[i][0]์ด ํญ์ ์ผ์์ผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์
๊ทธ๋์ ์ฒ์์ ๋ด๊ฐ isWeekday๋ฅผ ์ฌ์ฉํ ๋ฐฉ์์ด ์๋ชป๋์๋ค.
๋ด๊ฐ ์ด isWeekday ๋ฐฐ์ด๋ก ๊ณ์ฐํ๋ฉด ๋ง์ฝ์ startday =3 (์์์ผ) ์ผ ๋
![](https://blog.kakaocdn.net/dn/b9izwZ/btsMiHsqa3L/09pxewqofHr3CcrrKgAGT1/img.png)
j=0 โ ์ผ์์ผ (ํ๋ฆผ)
j=1 โ ์์์ผ (๋ง์)
j=2 โ ํ์์ผ (๋ง์)
j=3 โ ์์์ผ (๋ง์)
j=4 โ ๋ชฉ์์ผ (๋ง์)
j=5 โ ๊ธ์์ผ (๋ง์)
j=6 โ ํ ์์ผ (ํ๋ฆผ)
์ด ๋, j=0์ด ๋ฌด์กฐ๊ฑด ์ผ์์ผ์ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์์ผ์ด ๋ง์ง ์๋๋ค.
โ๏ธ ์์ ํ ์ฝ๋
isWeekday ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ , startday + j๋ฅผ ํตํด ํ์ฌ ์์ผ์ ์ง์ ๊ณ์ฐํด์ startday์ ๋ฐ๋ผ ์์ผ์ด ๋์ ์ผ๋ก ๋ณํ๊ฒ ํด์ผ ํ๋ค. ๋ ์ฌ๊ธฐ์ % 7 ์ฐ์ฐ์ผ๋ก ์๊ธ(1,5)๋ง ๊ฒ์ฌํ๊ณ ์ฃผ๋ง(0,6)์ ์ถ๊ทผ์๊ฐ ์กฐํ์์ ์ ์ธํ๋๋ก ํ๋ค.
for (int j = 0; j < timelogs[i].length; j++) { // ์ฌ๋ฐ๋ฅธ ์ฝ๋
if ((startday + j) % 7 > 0 && (startday + j) % 7 < 6) { // ์(1)~๊ธ(5)๋ง ๊ฒ์ฌ
if (timelogs[i][j] > targetTime) {
allOnTime = false;
break;
}
}
}
์ ์ฝ๋๋๋ก ํ๋ฉด startday = 3 (์์์ผ) ์ผ ๋,
j = 0 โ (3+0) % 7 = 3 (์์์ผ)
j = 1 โ (3+1) % 7 = 4 (๋ชฉ์์ผ)
j = 2 โ (3+2) % 7 = 5 (๊ธ์์ผ)
j = 3 โ (3+3) % 7 = 6 (ํ ์์ผ) โ (๊ฒ์ฌ ์ ํจ)
j = 4 โ (3+4) % 7 = 0 (์ผ์์ผ) โ (๊ฒ์ฌ ์ ํจ)
startday๋ถํฐ ๊ฒ์ฌํ๋ฉด์ ์์ผ์ด ๋ณํจ
- j=0~2 โ ์~๊ธ ๊ฒ์ฌ โ
- j=3,4 โ ์ฃผ๋ง์ด๋ผ ๊ฒ์ฌ ์ ํจ โ
โญ 3. ์ ๋ต์ฝ๋
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int n = schedules.length;
int count = 0;
// ์ง์๋ณ ์ฒดํฌ
for (int i = 0; i < n; i++) {
int targetTime = moreTime(schedules[i]);
boolean allOnTime = true;
for (int j = 0; j < timelogs[i].length; j++) {
if ((startday + j) % 7 > 0 && (startday + j) % 7 < 6) {
if (timelogs[i][j] > targetTime) {
allOnTime = false;
break;
}
}
}
if (allOnTime) count++;
}
return count;
}
public int moreTime(int time) {
time += 10;
if (time % 100 >= 60) {
time += 40;
}
return time;
}
}
๐๐ป ์ข์์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ฝ๋
import java.util.*;
import java.util.stream.IntStream;
class Solution {
public int solution(int[] schedules, int[][] timeLogs, int startDay) {
return (int) IntStream.range(0, timeLogs.length)
.filter(i -> IntStream.range(0, timeLogs[i].length).filter(idx -> timeLogs[i][idx] > (schedules[i] + ((schedules[i] % 100 > 49) ? 50 : 10)) && !(idx == 6 - startDay % 7 || idx == 7 - startDay)).count() == 0)
.count();
}
}
'Algorithm > JAVAํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์คํ์ฑํ ๋ฐฉ ๋ฌธ์ ํ์ด (2) | 2025.02.11 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ์๊ธฐ, ๋ ์์ ์ฐ์ฐ๊ฐ ๋น๊ตํ๊ธฐ (16) | 2025.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ์๊ธฐ (15) | 2025.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ๊ฒน์ณ์ฐ๊ธฐ (25) | 2025.02.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์๊ฒฉ์์คํ ๋ฌธ์ ํ์ด (26) | 2025.02.01 |