240319-TIL

2024. 3. 19. 22:15내일배움캠프

3월 19일

 

요즘엔 알고리즘 문제풀이에 온 신경을 쏟고있다.

 

새로운 문제를 접할때마다 내가 얼만큼 부족한지 깨닫고있다

 

오늘 푼 문제는 바로

 

2016년

더보기

 

오랜만에 설명이 좀 짧은것 같다.

 

솔루션의 초기 상태이다 일단 조심해야할께 한가지 있는데 바로

 

제한조건을 잘 봐야한다. 2016년은 윤년이라고 한다.

 

2016년이 윤년인걸 반영해서 monthDay를 만들어준다 

 

그다음 요일도 만들어주자 아 FRI가 첫번째 인덱스인 이유는 바로 2016년의 1월1일이 금요일이기 때문이다.

 

 

모든 일수를 더해서 넣어줄 total 변수 하나를 만들어주고 반복문을 돌려주자

 

주의할점은 a - 1 만큼 돌아줘야한다 이유는?

 

 입출력 예를 보면서 생각해보자 5월 24일이란 날자는 4월까지는 꽉꽉채워서 지나갔지만?

 

5월은 아직 진행중이기 때문이다

 

 

 

반복문에서 4월까지 다 더해주고 난 다음에 total에 b - 1만큼을 더해주자

 

왜  -1을 빼서 더해주는걸까?

 

물론 사람이 계산할때는 total에 b만큼을 더해주고 7을 나눈값의 나머지를 보고

 

day의 인덱스 중 나머지번째의 인덱스를 골라주면 된다.

 

하지만 우리는 배열의 첫번째 인덱스가 0부터 시작된다는걸 알고있고 문제대로의 계산이라면

 

total % 7 은 5가 나오게 되고

 

day[5]번쨰 인덱스는 금토일월 '화'가 아니라

 

금토일월화 '수' 가 되어버리게 된다 그렇기에 total에 b만큼을 더해주면서 -1을 해줘서 day의 5번째 인덱스가 나오게

 

만들어주자

 

이렇게 잘 나오게 된다

 

만약에 아까 total += b -1;에서 -1을 해주지 않았을 경우는?

 

 

이렇게 내가 예상하던 요일의 다음 요일이 나와버리게 된다.

 

끝!

 

이 아니라

 

항상 다른 사람의 문제풀이를 보자

 

 

두줄만에 끝내버렸다

 

 

바로 이녀석 DateTime 구조체이다

 

 

문제를 보자 2016년 a월 b일은 실제로 있는 날 이라고 하는게 이런 뜻이었나 보다

 

진짜 있는 날이다....

 

 

DateTime은 여러 생성자가 오버로딩되어 있다 그중 저 빨간색 네모의 생성자를 사용한듯 보인다

 

DateTime 구조체의 새 인스턴스를 연도, 월 및 날짜로 초기화 한다고 한다.

 

DayofWeek의 프로퍼티는 해당 인스턴스가 나타내는 일수를 가져온다고 한다.

 

이런식으로 나온다!

 

 

dateValue.DayofWeek는 형식이 string이 아니기때문에 string 형인 answer에 바로 넣어줄수가없다

 

그렇기에 Tostring()을 이용해 string으로 변환해주기로 하자

 

이러면 잘 들어가게 되고 TuesDay라고 나오기에 앞 3글자만 따와야한다

 

 

시작 인덱스는 0부터 시작해서 길이는 3까지 Substring을 이용해 잘라주자

 

SubString을 이용해 잘라준 answer을 ToUpper()를 이용해 대문자로 만들어주면 문제 해결!

 

이걸 한방에

 

 

이런식으로 한줄로 만들수있다

 

 

하나씩 뜯어보니 대단하다....

 

오늘도 알고리즘 문제를 풀어보았다

 

나름 잘 풀었다고 생각했는데 다른 사람 풀이를 보고 또 한번 벽을 느껴버렸다.

 

제한사항에 실제 있는 날이라는게 저런 의미인줄도 몰랐고

 

역시 문제를 봐도 아는만큼 뭔가 보이는게 있나보다

 

3월 19일 TIL은 여기서 마치도록 하겠다.

'내일배움캠프' 카테고리의 다른 글

240321-TIL  (0) 2024.03.21
240320-TIL  (0) 2024.03.20
240318-TIL  (0) 2024.03.18
240315-TIL  (0) 2024.03.15
240314-TIL  (0) 2024.03.14