일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BFS
- pytorch
- 조합론
- back propagation
- 알고리즘
- object detection
- 2023
- dfs
- 미래는_현재와_과거로
- 가끔은 말로
- 분할 정복
- 세그먼트 트리
- 회고록
- 자바스크립트
- 가끔은_말로
- 문자열
- 이분 탐색
- DP
- 백트래킹
- 너비 우선 탐색
- 플로이드 와샬
- c++
- Overfitting
- dropout
- 크루스칼
- NEXT
- tensorflow
- 다익스트라
- lazy propagation
- 우선 순위 큐
Archives
- Today
- Total
Doby's Lab
[알고리즘] 백준 23628번 : 악마의 연차 계산기 (C++) 본문
https://www.acmicpc.net/problem/23628
처음엔 많은 조건 분기로 풀었으나 이는 너무 복잡한 코드였다.
#include <iostream>
using namespace std;
int main() {
int y, m, d;
int dy, dm, dd;
cin >> y >> m >> d;
cin >> dy >> dm >> dd;
int year = 0;
int month = 0;
int days = 0;
if (dy == y) {
if (dm == m) {
year = 0;
month = 0;
days = dd - d;
}
else if (dm > m) {
year = 0;
if (dd >= d) {
month = dm - m;
days = (dm - m) * 30 + dd - d;
}
else {
month = dm - m - 1;
days = (dm - m - 1) * 30 + 30 - d + dd;
}
}
}
else if (dy > y) {
if (dm == m) {
if (dd >= d) {
month = (dy - y) * 12;
days = month * 30 + dd - d;
}
else if (dd < d) {
month = (dy - y) * 12 - 1;
days = month * 30 + 30 - d + dd;
}
}
else if (dm > m) {
if (dd >= d) {
month = (dy - y) * 12 + (dm - m);
days = month * 30 + dd - d;
}
else if (dd < d) {
month = (dy - y) * 12 + (dm - m) - 1;
days = month * 30 + 30 - d + dd;
}
}
else if (dm < m) {
if (dd >= d) {
month = (dy - y - 1) * 12 + 12 - m + dm;
days = month * 30 + dd - d;
}
else if (dd < d) {
month = (dy - y - 1) * 12 + 12 - m + dm - 1;
days = month * 30 + 30 - d + dd;
}
}
}
int yearCnt = month / 12;
year += 15 * yearCnt;
for (int i = 1; i <= yearCnt; i++) {
year += (i - 1) / 2;
}
if (month >= 36) {
month = 36;
}
cout << year << ' ' << month << '\n';
cout << days << "days";
return 0;
}
[AC 코드]
단순히 입력받은 날 2개를 다 날짜로 바꿔서 비교하면 간단하게 풀리는 문제다.
#include <iostream>
using namespace std;
int main() {
int y, m, d;
int dy, dm, dd;
cin >> y >> m >> d;
cin >> dy >> dm >> dd;
int day1 = 360 * (y - 1) + 30 * (m - 1) + d;
int day2 = 360 * (dy - 1) + 30 * (dm - 1) + dd;
int days = day2 - day1;
int month = days / 30;
int yearCnt = month / 12;
int year = 0;
year += 15 * yearCnt;
for (int i = 1; i <= yearCnt; i++) {
year += (i - 1) / 2;
}
if (month >= 36) {
month = 36;
}
cout << year << ' ' << month << '\n';
cout << days << "days";
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
[알고리즘] 백준 10844번: 쉬운 계단 수 (C++) (0) | 2021.11.24 |
---|---|
[알고리즘] 백준 2156번: 포도주 시식 (C++), 솔루션 없음 (0) | 2021.11.23 |
[알고리즘] 백준 1990번: 소수인팰린드롬 (C++), 이런 문제는 어떡하지 (0) | 2021.11.21 |
[자료구조] 백준 1918번: 후위 표기식 (C++), stack의 특성 LIFO (0) | 2021.11.20 |
[알고리즘] 백준 2206번: 벽 부수고 이동하기 (C++), 새로운 유형 BFS + Greedy (0) | 2021.11.20 |