๐ฅ 2022/05/28 solved
https://programmers.co.kr/learn/courses/30/lessons/17676?language=java
๋ฌธ์ ์ค๋ช
์ถ์ ํธ๋ํฝ
์ด๋ฒ ์ถ์์๋ ์์คํ ์ฅ์ ๊ฐ ์๋ ๋ช ์ ์ ๋ณด๋ด๊ณ ์ถ์ ์ดํผ์น๋ ์๋ฒ๋ฅผ ์ฆ์คํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด๋ค. ์ฅ์ ๋๋น์ฉ ์๋ฒ ์ฆ์ค ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์๋ ์ถ์ ๊ธฐ๊ฐ์ธ 9์ 15์ผ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ํ ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ๊ณ์ฐํด๋ณด๊ธฐ๋ก ํ๋ค. ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ์์ฒญ์ ์๋ต ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์์ ์๊ฐ๋ถํฐ 1์ด(=1,000๋ฐ๋ฆฌ์ด)๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ์ต๋ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
์ ๋ ฅ ํ์
- solution ํจ์์ ์ ๋ฌ๋๋ lines ๋ฐฐ์ด์ N(1 โฆ N โฆ 2,000)๊ฐ์ ๋ก๊ทธ ๋ฌธ์์ด๋ก ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋ก๊ทธ ๋ฌธ์์ด๋ง๋ค ์์ฒญ์ ๋ํ ์๋ต์๋ฃ์๊ฐ S์ ์ฒ๋ฆฌ์๊ฐ T๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์๋ค.
- ์๋ต์๋ฃ์๊ฐ S๋ ์๋ ์ถ์์ธ 2016๋ 9์ 15์ผ๋ง ํฌํจํ์ฌ ๊ณ ์ ๊ธธ์ด 2016-09-15 hh:mm:ss.sss ํ์์ผ๋ก ๋์ด ์๋ค.
- ์ฒ๋ฆฌ์๊ฐ T๋ 0.1s, 0.312s, 2s ์ ๊ฐ์ด ์ต๋ ์์์ ์ ์งธ ์๋ฆฌ๊น์ง ๊ธฐ๋กํ๋ฉฐ ๋ค์๋ ์ด ๋จ์๋ฅผ ์๋ฏธํ๋ s๋ก ๋๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ก๊ทธ ๋ฌธ์์ด 2016-09-15 03:10:33.020 0.011s์ "2016๋ 9์ 15์ผ ์ค์ 3์ 10๋ถ 33.010์ด"๋ถํฐ "2016๋ 9์ 15์ผ ์ค์ 3์ 10๋ถ 33.020์ด"๊น์ง "0.011์ด" ๋์ ์ฒ๋ฆฌ๋ ์์ฒญ์ ์๋ฏธํ๋ค. (์ฒ๋ฆฌ์๊ฐ์ ์์์๊ฐ๊ณผ ๋์๊ฐ์ ํฌํจ)
- ์๋ฒ์๋ ํ์์์์ด 3์ด๋ก ์ ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ์๊ฐ์ 0.001 โฆ T โฆ 3.000์ด๋ค.
- lines ๋ฐฐ์ด์ ์๋ต์๋ฃ์๊ฐ S๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด ์๋ค.
์ถ๋ ฅ ํ์
- solution ํจ์์์๋ ๋ก๊ทธ ๋ฐ์ดํฐ lines ๋ฐฐ์ด์ ๋ํด ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ๋ฆฌํดํ๋ค.
์ ์ถ๋ ฅ ์์
์์ 1
- ์
๋ ฅ: [
"2016-09-15 01:00:04.001 2.0s",
"2016-09-15 01:00:07.000 2s"
] - ์ถ๋ ฅ: 1
์์ 2
- ์
๋ ฅ: [
"2016-09-15 01:00:04.002 2.0s",
"2016-09-15 01:00:07.000 2s"
] - ์ถ๋ ฅ: 2
- ์ค๋ช
: ์ฒ๋ฆฌ์๊ฐ์ ์์์๊ฐ๊ณผ ๋์๊ฐ์ ํฌํจํ๋ฏ๋ก
์ฒซ ๋ฒ์งธ ๋ก๊ทธ๋ 01:00:02.003 ~ 01:00:04.002์์ 2์ด ๋์ ์ฒ๋ฆฌ๋์์ผ๋ฉฐ,
๋ ๋ฒ์งธ ๋ก๊ทธ๋ 01:00:05.001 ~ 01:00:07.000์์ 2์ด ๋์ ์ฒ๋ฆฌ๋๋ค.
๋ฐ๋ผ์, ์ฒซ ๋ฒ์งธ ๋ก๊ทธ๊ฐ ๋๋๋ ์์ ๊ณผ ๋ ๋ฒ์งธ ๋ก๊ทธ๊ฐ ์์ํ๋ ์์ ์ ๊ตฌ๊ฐ์ธ 01:00:04.002 ~ 01:00:05.001 1์ด ๋์ ์ต๋ 2๊ฐ๊ฐ ๋๋ค.
์์ 3
- ์
๋ ฅ: [
"2016-09-15 20:59:57.421 0.351s",
"2016-09-15 20:59:58.233 1.181s",
"2016-09-15 20:59:58.299 0.8s",
"2016-09-15 20:59:58.688 1.041s",
"2016-09-15 20:59:59.591 1.412s",
"2016-09-15 21:00:00.464 1.466s",
"2016-09-15 21:00:00.741 1.581s",
"2016-09-15 21:00:00.748 2.31s",
"2016-09-15 21:00:00.966 0.381s",
"2016-09-15 21:00:02.066 2.62s"
] - ์ถ๋ ฅ: 7
- ์ค๋ช
: ์๋ ํ์๋ผ์ธ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ์์ผ๋ก ํ์๋ 1์ด ๊ฐ ๊ตฌ๊ฐ์ ์ฒ๋ฆฌ๋์ ๊ตฌํด๋ณด๋ฉด (1)์ 4๊ฐ, (2)๋ 7๊ฐ, (3)๋ 2๊ฐ์์ ์ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ 7์ด ๋๋ฉฐ, ๋์ผํ ์ต๋ ์ฒ๋ฆฌ๋์ ๊ฐ๋ 1์ด ๊ตฌ๊ฐ์ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ์์๋ ๊ตฌ๊ฐ์ด ์๋ ๊ฐ์๋ง ์ถ๋ ฅํ๋ค.
๐ฅ [๋ก์ง]
[ Step1. ์์์๊ฐ, ๋์๊ฐ์ ๊ณ์ฐํด์ timeLine๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ธฐ ]
1. ์ฃผ์ด์ง ์ ๋ ฅ๋ณ์์ธ lines๋ฅผ " "(์คํ์ด์ค๋ฐ)๋จ์๋ก ์ชผ๊ฐ์ String ๋ฐฐ์ด์ธ line์ ์ ์ฅ.(ํ์ํ ๋ณ์๋ 1, 2๋ฒ์งธ ๊ฐ)
2. ์๋ต ์๋ฃ ์๊ฐ์ ํด๋นํ๋ line์ 1๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ":" ๋จ์๋ก ์ชผ๊ฐ์ ๊ฐ๊ฐ String ๋ฐฐ์ด์ธ timeList์ ์ ์ฅ
3. timeList์ ๋ด๊ธด ๊ฐ์ผ๋ก millisecond ๊ฐ ๊ณ์ฐํ๊ธฐ
(1) ์๊ฐ์ millisecond๋ก
-> ์๊ฐ * 1000 * 60 * 60
(2) ๋ถ์ millisecond๋ก
-> ๋ถ * 1000 * 60
(3) ์ด๋ฅผ millisecond๋ก
-> ์ด * 1000
[ Step2. ์ํ์๊ฐ case์ ๋ฐ๋ผ ๋ถ๊ธฐํ, 1์ด๋์์ ์ต๋ ์ฒ๋ฆฌ๋ ๊ณ์ฐํ๊ธฐ]
4. for๋ฌธ์ ๋๋ฒ ๋๋ฆผ. (๋ฐ๊นฅ์ชฝ for๋ฌธ์ ์ฒ๋ฆฌ์์ ์ i, ์์ชฝ for๋ฌธ์ ์ฒ๋ฆฌ์์ ์ j๋ผ๊ณ ์ง์นญํจ)
(1) cnt = 1๋ก ์ด๊ธฐํ (cnt : i๋ฒ์งธ ์ํ ์ข ๋ฃ ์ง์ ~1์ด๋ค๊น์ง์ ์ต๋ ๋์์ํ๋์ ์๋ฏธ)
(2) cnt ์ฆ๊ฐ ๊ธฐ์ค์ ๋ง๊ฒ 3๊ฐ์ง case๋ก ๋ถ๊ธฐ ํ cnt์ฆ๊ฐํด์ฃผ๊ธฐ
๐ฅ cnt ์ฆ๊ฐ๊ธฐ์ค ๐ฅ
[1] ์์ j์ ์์์๊ฐ์ด (์์ i์ ์ข ๋ฃ์๊ฐ ~ 1์ด ๋ค ์ฌ์ด)์ ์์นํ ๊ฒฝ์ฐ
[2] ์์ j์ ์์์๊ฐ์ด ์์ i์ ์ข ๋ฃ์๊ฐ์ ์์ ์์นํ ๊ฒฝ์ฐ
[3] ์์ j์ ์์์๊ฐ์ด (์์ i์ ์์์๊ฐ๋ณด๋ค ๋น ๋ฅด๋ฉด์ i์ ์ข ๋ฃ์๊ฐ๋ณด๋ค๋ ๋ฆ์ ๊ฒฝ์ฐ)
(3) ์์ชฝ for๋ฌธ ์ํ ์ข ๋ฃ ์ดํ cnt๊ฐ์ด max๊ฐ๋ณด๋ค ๋ ํฐ ๊ฒฝ์ฐ, ์ต๋ ์ํ๋์ด ์๋กญ๊ฒ ๊ณ์ฐ๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ max๊ฐ์ ๊ฐฑ์ ํด ์ฃผ๊ธฐ !
๐ฅ [์ต์ข ์ฝ๋]
import java.util.*;
import java.time.*;
import java.util.Calendar;
import java.text.*;
import java.lang.*;
class Solution {
public int solution(String[] lines) throws ParseException {
int max = 0;
int[][] timeline = new int[lines.length][2];
for(int i = 0; i < lines.length; i++) {
//๋ฐ์์จ string " " ๋จ์๋ก ์ชผ๊ฐ์ string ๋ฐฐ์ด์ ์ ์ฅ
String[] line = lines[i].split(" ");
//line์ 1,2๋ฒ์งธ ๊ฐ ๋ถ๋ฌ์์ millisecond๋จ์๋ก ์์, ์ข
๋ฃ์๊ฐ ๊ณ์ฐ
String[] timeList = line[1].split(":");
int endTime = (int)(Double.parseDouble(timeList[0]))*1000*60*60;
endTime += (int)(Double.parseDouble(timeList[1]))*1000*60;
endTime += (int)((Double.parseDouble(timeList[2]))*1000);
int duration = (int)(Double.parseDouble(line[2].replaceAll("[^0-9.]",""))*1000);
int startTime = endTime - duration+1;
timeline[i][0] = startTime;
timeline[i][1] = endTime;
}
for(int i = 0; i < lines.length; i++) {
int cnt = 1;
for(int j = i+1; j < lines.length; j++) {
// (1) ์์์๊ฐ(j)์ด ์ข
๋ฃ์๊ฐ(i)์ผ๋ก๋ถํฐ ~ 1์ด๋ค ์ฌ์ด์ธ ๊ฒฝ์ฐ
if(((timeline[j][0] >= timeline[i][1]) && (timeline[j][0] < timeline[i][1] + 1000))) {
cnt++;
} // (2) ์์์๊ฐ(j)์ด i์ ์ข
๋ฃ์๊ฐ๋ณด๋ค ๋น ๋ฅธ๊ฒฝ์ฐ
else if((timeline[j][0] <= timeline[i][1]) && (timeline[j][1] >= timeline[i][1])) {
cnt++;
} // (3) ์์์๊ฐ(j)๊ฐ i์ ์์์๊ฐ๋ณด๋ค ๋น ๋ฅด๊ณ ์ข
๋ฃ์๊ฐ๋ i๋ณด๋ค ๋ ๋ฆ์ ๊ฒฝ์ฐ
else if((timeline[j][0] <= timeline[i][0] )&& (timeline[j][1] >= timeline[i][1]) ){
cnt++;
}
}
if(cnt > max)
max = cnt;
}
return max;
}
}
๐ฅ [์๊ฐ]
์ ๋ง ์ค๋์๊ฐ๋์ ์ฝ์งํ ๋ฌธ์ !!
case๋ฅผ 3๊ฐ์ง๋ก ๋ถ๊ธฐํด์ผํ๋๋ฐ ๋ง์ง๋ง case๋ฅผ ์๊ฐํด๋ด์ง ๋ชปํด์ ํน์ ํ ์คํธ์ผ์ด์ค์์ ๊ณ์ ์ํ์คํจ๊ฐ ๋ฌ์๋ค.
์ ์ผ ๊ฐ๊ณผํ๋ ์ ์ ์ฃผ์ด์ง ์ ๋ ฅ๊ฐ์ด ์ํ์๊ฐ ์ข ๋ฃ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด์๋ค๋ ์ ์ด๋ค ใ ใ
์ด๊ฒ ๋ญ๊ฐ ์ค์ํ๊ฐ ์ถ์ ์๋ ์์ง๋ง ์ด๊ฑธ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์ธ๋ฒ์งธ ์ผ์ด์ค๋ฅผ ์ค๊ณํ ์๊ฐ ์๋ค.
์๋๋ฉด ์์ ์์ ์์์๊ฐ๋ณด๋ค ๋ค์ ์์ ์์์๊ฐ์ด ๋ ๋น ๋ฅผ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ ๊ธฐ์กด์ (1), (2)์ผ์ด์ค๋ง ์๊ฐํ๊ณ ๊ทธ ์ด์ธ์ ๊ฒฝ์ฐ์๋ break๋ฅผ ๊ฑธ์ด์ ์์ชฝ for๋ฌธ์ ํ์ถํ๋๋ก ์ฒ๋ฆฌํ์๋๋ฐ ๊ทธ๋ด๊ฒฝ์ฐ (์๋ฐ๊ธฐ์ค) ํ ์คํธ์ผ์ด์ค 3,18์์ ๊ณ์ ์๋ฌ๊ฐ ๋๊ฒ ๋๋ค.
๊ทธ๋์ break๋ฌธ ํํธ๋ง ์ง์ฐ๊ณ (3)๋ฒ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๋๊น ๋ฐ๋ก ์ฑ๊ณตํ๋ค ๋ด ์๊ฐ ใ ํํ
๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํ๊ธฐ๋ ํ๊ณ .. ๋ฌธ์ ์์ ์ฃผ์ด์ง ๊ทธ๋ํ๋ฅผ ์ ๋๋ก ๋ถ์ํ์ง ์๊ณ ๊ธํ๊ฒ ๋ก์ง์ ์ง์ ๊ทธ๋ฐ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค.
์ฝ๋ฉํ ์คํธ ์๊ฐ์ ๊ธธ์ง๋ง ๋ง์ ์ฝ๋๋ฅผ ์ง๋ ์๊ฐ๋ณด๋ค๋ ๋ก์ง์ ์ง๊ณ ๊ฐ๋งํ ์์์ ์๊ฐํ๋ ์๊ฐ์ด ํจ์ฌ ๋ ํฐ ๋น์ค์ ์ฐจ์งํ๋ ๊ฒ ๊ฐ๋ค.
๋ฌธ์ ๋ฅผ ์ข ๋ ๊ผผ๊ผผํ ์ฝ๊ณ ์ธ๋ถ์ ์ธ ๋ํ ์ผ์ ์ก์์ ํฌ์ํ ์๊ฐ์ด ํ์ง์ด ๋์ง ์๊ฒ ํด์ผ๊ฒ ๋น
๋ถ์กฑํ ์ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ์์ผ๋ก์ ํฌ์คํ ์ ๋ฐ์ํ๊ฒ ์ต๋๋ค! ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค :)
-budtree