โจ ๊ทธ๋ฆฌ๋ & ์ ๋ ฌ
https://www.acmicpc.net/problem/2457
2457๋ฒ: ๊ณต์ฃผ๋์ ์ ์
์ฒซ์งธ ์ค์๋ ๊ฝ๋ค์ ์ด ๊ฐ์ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ๊ฝ์ด ํผ๋ ๋ ์ง์ ์ง๋ ๋ ์ง๊ฐ ์ฃผ์ด์ง๋ค. ํ๋์ ๋ ์ง๋ ์๊ณผ ์ผ์ ๋ํ๋ด๋ ๋ ์ซ์๋ก ํํ๋๋ค. ์๋ฅผ ๋ค์ด์,
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ๋ ์ง๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ๋ณด๋ฅผ ๋์๋น๊ต ๊ฐ๋ฅํ๊ฒ๋ ์ ์๋ก ๋ฐ๊พธ๊ธฐ
- 3/1 ~ 11/30 ๊น์ง๋ง ํ์ธํ๋ฉด ๋๋ค.
- ๊ฝ์ด ์ง๋ ๋ ์๋ ๊ฝ์ ๋ณผ ์ ์๋ค.
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์ง๋ฅผ ๊ฝ์ด ํ ๋ ์ง๊ฐ ์ด๋ฅธ ์, ๋ง์ฝ ํ ๋ ์ง๊ฐ ๊ฐ๋ค๋ฉด ์ง ๋ ์ง๊ฐ ์ด๋ฅธ ์์ผ๋ก ์ ๋ ฌ์์ผ์ผ ํ๋ค.
๐น๏ธ ํ์ด ๊ณผ์
๋ชป ํ์ด์ ํ์ด๋ฅผ ๋ณด๊ณ ๋ค์ ํ์๋ค.
Olympiad>ํ๊ตญ์ ๋ณด์ฌ๋ฆผํผ์๋> ํ๊ตญ์ ๋ณด์ฌ๋ฆผํผ์๋์โค๋์ง์ญ๋ณธ์ >์ง์ญ๋ณธ์ 2011>์ด๋ฑ๋ถ 3๋ฒ
์ด๋ ๊ฒ ์ด๋ฑ๋ถ ๋ฌธ์ ๋ฅผ ๋ชป ํ๋ฉด ์ข ํํํ๋ค. ๊ทธ๋ฆฌ๋๋ DP ๋ฌธ์ ๋ ์ฝ๋ ๊ธธ์ด๊ฐ ์งง์ ํธ์ธ๋ฐ ์ฝ๋๋ก ํ ๋ฒ์ ๊ตฌํํ๊ธฐ ์ ์ผ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค..๐ฅฒ
๐น ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์ง ์ ๋ ฌํ๊ธฐ
static class Info implements Comparable<Info>{
int start, end;
public Info(int start, int end){
this.start=start;
this.end=end;
}
public int compareTo(Info o){
if(start==o.start) return end-o.end;
else return start-o.start;
}
}
๊ฝ์ด ํ ๋ ์ง๊ฐ ์ด๋ฅธ ์์๋๋ก ์ ๋ ฌํ๋ ๋ง์ฝ ๋ ์ง๊ฐ ๊ฐ๋ค๋ฉด ๊ฝ์ด ์ง ๋ ์ง๊ฐ ์ด๋ฅธ ์์๋๋ก ์ ๋ ฌํ๋ค.
๐น ๋ ์ง๋ฅผ ์ซ์๋ก ๋ณ๊ฒฝํ๊ธฐ
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int startMonth = Integer.parseInt(st.nextToken());
int startDay = Integer.parseInt(st.nextToken());
int endMonth = Integer.parseInt(st.nextToken());
int endDay = Integer.parseInt(st.nextToken());
int start = startMonth * 100 + startDay;
int end = endMonth * 100 + endDay;
dates[i] = new Info(start, end);
}
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์ง๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ซ์๋ก ๋ณํํ๋ค.
์๋ฅผ ๋ค์ด 3์ 1์ผ์ด๋ผ๋ฉด 301, 5์ 26์ผ์ด๋ผ๋ฉด 526์ผ๋ก ๋ฐ๊พธ์ด์ ํ๋ฉด ๋์๋น๊ต๊ฐ ๋ณด๋ค ์ฝ๋ค.
๐น ๊ฝ์ ๋ณผ ์ ์๋ ๋ ์ง ํ์ํ๊ธฐ
int cnt=0;
int startDay = 301;
int endDay = 1201;
int idx=0;
int end=0;
while(startDay<endDay){
boolean check=false;
for(int i=idx; i<N; i++){
Info d = dates[i];
if(d.start>startDay) break;
if(d.end>end){
end = d.end;
idx = i+1;
check=true;
}
}
if(check){
startDay=end;
cnt++;
}else break;
}
- ์์ ๋ ์ง๋ 3์ 1์ผ(301), ๋ง์ง๋ง ๋ ์ง๋ 12์ 1์ผ(1201)๋ก ์ง์ ํด๋๋ค. ๐ 11์ 30์ผ๊น์ง ๋ณด๊ธฐ ์ํด์๋ ๊ฝ์ด ์ง๋ ๋ ์ง๊ฐ 12์ 1์ผ์ด์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ์ง๋ค์ ํ์ํด๊ฐ๋ฉฐ ๊ฝ์ ๋ณผ ์ ์๋ ๋ ์ง์ธ์ง ์๋์ง๋ฅผ ํ์ธํ๋ค.
- ๋ง์ฝ dates ์ค์์ ๊ฝ์ด ํผ๋ ๋ ์ง๊ฐ startDay๋ณด๋ค ํฌ๋ค๋ฉด ๊ฝ์ ๋ณผ ์ ์๋ ๋ ์ด ๋ฐ์ํ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
- ๋ง์ฝ dates ์ค์์ ๊ฝ์ด ํผ๋ ๋ ์ง๊ฐ startDay๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๊ณ , ๊ฝ์ด ์ง๋ ๋ ์ง๊ฐ end๋ณด๋ค ํฌ๋ค๋ฉด ๊ฝ์ ์ถฉ๋ถํ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ end๋ฅผ ๊ฐฑ์ ํ๋ค. ๋ํ ๋ณผ ์ ์๋ค๋ ๊ฒ์ check=true๋ก ๋ํ๋ธ๋ค. ๐ end๋ ๊ฝ์ ๋ณผ ์ ์๋ ๊ฐ์ฅ ํฐ ๋ ์ง๋ฅผ ์๋ฏธํ๋ค.
- ๊ฝ์ ๋ณผ ์ ์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ ๋ค์ while๋ฌธ์ ๋ฐ๋ณตํ ๋ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ฐ๋ก ๋ค์ ๋ ์ง๋ถํฐ ์์ํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก idx=i+1๋ก idx๋ฅผ ๋ฐ๋ก ์ ์ฅํ๋ค.
- ๋ ์ง๋ค์ ๋ค ํ์ํ ํ ๊ฝ์ ๋ณผ ์ ์๋ค๋ฉด startDay๋ฅผ ๊ฐฑ์ ํ๊ณ , ๊ฝ์ ๋ณผ ์ ์๋ ๊ฒ์ ๋ง์กฑ์ํค๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ฅผ ํ๋ ์ฆ๊ฐ์ํจ๋ค.
๐ฉ๐ป ์ ์ฒด ์ฝ๋
public class BOJ_2457_๊ณต์ฃผ๋์์ ์ {
static class Info implements Comparable<Info>{
int start, end;
public Info(int start, int end){
this.start=start;
this.end=end;
}
public int compareTo(Info o){
if(start==o.start) return end-o.end;
else return start-o.start;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Info[] dates = new Info[N];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int startMonth = Integer.parseInt(st.nextToken());
int startDay = Integer.parseInt(st.nextToken());
int endMonth = Integer.parseInt(st.nextToken());
int endDay = Integer.parseInt(st.nextToken());
int start = startMonth * 100 + startDay;
int end = endMonth * 100 + endDay;
dates[i] = new Info(start, end);
}
Arrays.sort(dates);
int cnt=0;
int startDay = 301;
int endDay = 1201;
int idx=0;
int end=0;
while(startDay<endDay){
boolean check=false;
for(int i=idx; i<N; i++){
Info d = dates[i];
if(d.start>startDay) break;
if(d.end>end){
end = d.end;
idx = i+1;
check=true;
}
}
if(check){
startDay=end;
cnt++;
}else break;
}
if(end<endDay) cnt=0;
int answer=cnt;
bw.write(answer + " ");
bw.flush();
bw.close();
}
}
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 1202 ๋ณด์๋๋ - Java (1) | 2024.04.19 |
---|---|
[BOJ] 1238 ํํฐ - Java (0) | 2024.04.18 |
[BOJ] 2169 ๋ก๋ด ์กฐ์ข ํ๊ธฐ - Java (1) | 2024.04.16 |
[BOJ] 14503 ๋ก๋ด์ฒญ์๊ธฐ - Java (0) | 2024.04.11 |
[BOJ] 19238 ์คํํธ ํ์ - Java (0) | 2024.04.11 |