๐ ๋ฌธ์
๐ง ์์ด๋์ด
1. ์-์ผ์ ๋ชจ๋ Days (์ผ) ๋ก ํต์ผ
1์ 1์ผ-> 1
12์ 31์ผ -> 365
๋ก ์นํํ๋ค.
์ด๋ฅผ ์ํด HashMap ์ ์์ฑํ์ฌ ๊ฐ ์๋ง๋ค ์ผ์๋ฅผ ๋งคํ์์ผ์ฃผ์๋ค.
private final HashMap<Integer,Integer> monthDayMap = new HashMap<Integer, Integer>();
{
monthDayMap.put(0, 0);
monthDayMap.put(1, 31);
monthDayMap.put(2, 28);
monthDayMap.put(3, 31);
monthDayMap.put(4, 30);
monthDayMap.put(5, 31);
monthDayMap.put(6, 30);
monthDayMap.put(7, 31);
monthDayMap.put(8, 31);
monthDayMap.put(9, 30);
monthDayMap.put(10, 31);
monthDayMap.put(11, 30);
monthDayMap.put(12, 31);
// 6์ 15์ผ์ด๋ผ๋ฉด 31์ผ(1์) + 28์ผ(2์) + 31์ผ(3์) + 30์ผ(4์) + 31์ผ(5์) + 15์ผ
}
2. 3์ 1์ผ๊ณผ 11์ 30์ผ ํํ
ํญ์ ๊ฝ์ด ํผ์ด์์ด์ผ ํ๋ ์์ - ์ข ๋ฃ ์ผ์ ์ผ์๋ก ํํํด๋ณด์.
3์ 1์ผ: 31์ผ (1์) + 28์ผ (2์) + 1์ผ
11์ 30์ผ: 365์ผ - 31์ผ (12์)
๋ถ๋ฑํธ์ ์ ์ํ์.
์ฒซ ๊ฝ์ ๊ฐํ์ผ์๋ ๋ฐ๋์ 3์ 1์ผ ์ดํ(<=)์ฌ์ผํ๋ค.
๋ง์ง๋ง ๊ฝ์ ์ง๋ ์ผ์๋ 11์ 30์ผ์ ์ด๊ณผ(>)ํด์ผํ๋ค.
3. ๊ฐํ์ผ์ ์ค๋ฆ์ฐจ์, ๋ํ์ผ์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
๊ฝ์ ๊ฐ์ฅ ์ ๊ฒ ์ ํํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ๊ฐํ์ผ์ ๋น ๋ฅด๊ณ , ๋ํ์ผ์ ์ต๋ํ ๋ฆ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ฝ๋ฉ ํ ์คํธ์์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๋ค๋ฉด, ์ง๊ด์ ์ผ๋ก ์์ ๊ฐ์ ์๊ฐ์ ํ๊ณ ๊ทธ๋ฆฌ๋๋ก ์ ๊ทผํด ํ์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ผํ๋ค.
๋ค์ ๊ฝ์ ์ ํํ ์ ์์ผ๋ฉด
0 ์ผ๋ก ์ฒ๋ฆฌํด์ผํ๋ค.
๋ค์ ๊ฐํ์ผ์ด ์ต๊ทผ ์ ํํ ๊ฝ์ ๋ํ์ผ๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ฎ์ ๊ฝ์ด ์๋ ๊ฒฝ์ฐ loop ์ ํ์ถํ์ฌ 0์ผ๋ก ๋ต์ ์ฒ๋ฆฌํด์ผํ๋ค.
๋ ์ด๋ฏธ ํ ๋ฒ ์ ํํ ๊ฝ์ ๋ค์ ์ ํํ ์ ์์ผ๋ฏ๋ก ์ ์ธํด์ผํ๋ค.
๐ Java Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
class Flower implements Comparable<Flower> {
public int startDays = 0;
public int endDays = 0;
private final HashMap<Integer,Integer> monthDayMap = new HashMap<Integer, Integer>();
{
monthDayMap.put(0, 0);
monthDayMap.put(1, 31);
monthDayMap.put(2, 28);
monthDayMap.put(3, 31);
monthDayMap.put(4, 30);
monthDayMap.put(5, 31);
monthDayMap.put(6, 30);
monthDayMap.put(7, 31);
monthDayMap.put(8, 31);
monthDayMap.put(9, 30);
monthDayMap.put(10, 31);
monthDayMap.put(11, 30);
monthDayMap.put(12, 31);
}
Flower(int startMonth, int startDay, int endMonth, int endDay) {
for (var month = 0; month < startMonth; month++) {
this.startDays += monthDayMap.get(month);
}
this.startDays += startDay;
for (var month = 0; month < endMonth; month++) {
this.endDays += monthDayMap.get(month);
}
this.endDays += endDay;
}
@Override
public int compareTo(Flower o) {
if (this.endDays == o.endDays) return this.startDays - o.startDays;
return o.endDays - this.endDays;
}
}
public class Main {
public static void main(String[] args) throws IOException {
var bufferedReader = new BufferedReader(new InputStreamReader(System.in));
var flowerCnt = Integer.parseInt(bufferedReader.readLine());
var flowers = new Flower[flowerCnt];
for (var i = 0; i < flowerCnt; i++) {
var strs = bufferedReader.readLine().split(" ");
flowers[i] = new Flower(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), Integer.parseInt(strs[2]), Integer.parseInt(strs[3]));
}
Arrays.sort(flowers);
// start day is not Feb 28, can on Mar 1
var startDays = 31 + 28 + 1;
final int endDays = 365 - 31;
var answer = 0;
while (true) {
var isExistFlower = false;
for (var flower: flowers) {
if (flower.startDays <= startDays) {
isExistFlower = true;
startDays = flower.endDays;
// if already choosen flower, doesn't choice more
flower.startDays = 400;
answer++;
break;
}
}
if (!isExistFlower || startDays > endDays) break;
}
// if endDays not greater than 11 month 30
if (startDays <= endDays) answer = 0;
System.out.print(answer);
}
}
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 12100 2048 (Easy) (0) | 2022.10.28 |
---|---|
[๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด (0) | 2022.10.25 |
[๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.10.13 |
[๋ฐฑ์ค] 11559 Puyo Puyo (2) | 2022.10.13 |
[๋ฐฑ์ค] 10799 ์ ๋ง๋๊ธฐ (0) | 2022.10.11 |