728x90
반응형
문제 풀기 전 생각 :
/*
예전에 날짜 구하는 문제를 수업과제로 해본 적이 있어서
푸는 방법을 알고 있었다.
대신 입력받은 date를 year month day로 나눠야 한다.
이 부분은 split이 없으니 직접 반복문으로 처리해줘야 한다.
*/
#include <string>
class Solution {
public:
int dayOfYear(string date) {
int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int ymd[3];
int i=0,answer=0;
string tmp = "";
date += '-';
for(int j=0 ; j<11 ; j++){
if(date[j] != '-') tmp += date[j];
else {
ymd[i] = stoi(tmp);
tmp = "";
i++;
}
}
if(ymd[0]%400 == 0 || (ymd[0]%100!=0 && ymd[0]%4==0) ) days[1] = 29;
for(int j=0 ; j<ymd[1]-1 ; j++){
answer += days[j];
}
answer += ymd[2];
return answer;
}
};
https://leetcode.com/problems/day-of-the-year/
풀 때 어려웠던 점 또는 느낀점 :
c++에는 split 기능이 없어서
직접 그 기능을 구현해서 사용해야 한다는 점이
참 불편하다 자바나 파이썬 코드를 보다 시플플 보면
답답한것이 이런 것들이 모여서 인듯 하다.
그래도 이가 없으면 잇몸으로라도 풀어야지..
개선방안 :
class Solution {
public:
int dayOfYear(string date)
{
int y = stoi(date.substr(0, 4)), m = stoi(date.substr(5, 2)), d = stoi(date.substr(8, 2));
d += m < 9 ? (m/2) * 31 : ((m + 1)/2) * 31;
if(m >= 3)d += 28, d += m < 9 ? max(0, (((m + 1)/2) - 2) * 30) : (((m/2) - 2) * 30);
if(y % 4 == 0 && m > 2)++d;
return d;
}
};
삼항 연산자를 잘 사용하면 저렇게 간단하게도 풀수 있구나
신기하구만요 substr() 함수를 사용하는 방법도 있는지 이제야 생각났다
담에는 더 잘 풀어야지
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++] [LeetCode 125] Valid Palindrome (pps 5-6) (0) | 2021.07.22 |
---|---|
[C++] [LeetCode 412] Fizz Buzz (pps 5-5) (0) | 2021.07.22 |
[JAVA] [백준 5355] 화성 수학 (pps 5-2) (0) | 2021.07.18 |
[C++] [백준 2163] 초콜릿 자르기 (pps 5-1) (0) | 2021.07.18 |
[C++] [백준 1476] 날짜 계산 (pps 4-9) (0) | 2021.07.18 |
댓글