2024. 3. 19. 22:15ㆍ내일배움캠프
3월 19일
요즘엔 알고리즘 문제풀이에 온 신경을 쏟고있다.
새로운 문제를 접할때마다 내가 얼만큼 부족한지 깨닫고있다
오늘 푼 문제는 바로
2016년
![](https://blog.kakaocdn.net/dn/UYfi6/btsFUkq4bwC/KLkA3jrEVzK8DAsctgftyK/img.png)
오랜만에 설명이 좀 짧은것 같다.
![](https://blog.kakaocdn.net/dn/dZcQrV/btsFUIkUgB2/X3vRTBVSAB41WkNgv2iVpK/img.png)
솔루션의 초기 상태이다 일단 조심해야할께 한가지 있는데 바로
![](https://blog.kakaocdn.net/dn/qRdRy/btsFXaNYCPg/kTC6mFwKygdFIf6cuwcV70/img.png)
제한조건을 잘 봐야한다. 2016년은 윤년이라고 한다.
![](https://blog.kakaocdn.net/dn/uVU4n/btsFUHGmCzB/cVAUkBi2wHwKXfYD1KzdiK/img.png)
2016년이 윤년인걸 반영해서 monthDay를 만들어준다
![](https://blog.kakaocdn.net/dn/bYxpbA/btsFS2YI1VH/gKK6aKIhm6sC8UeKWNJZF0/img.png)
그다음 요일도 만들어주자 아 FRI가 첫번째 인덱스인 이유는 바로 2016년의 1월1일이 금요일이기 때문이다.
![](https://blog.kakaocdn.net/dn/GWirS/btsFUe5Ejiq/5YDDDdoijxvlFUDMO9WahK/img.png)
모든 일수를 더해서 넣어줄 total 변수 하나를 만들어주고 반복문을 돌려주자
주의할점은 a - 1 만큼 돌아줘야한다 이유는?
![](https://blog.kakaocdn.net/dn/ckxRXK/btsFVuUbvsQ/CFxbSlvzz3aGrK4mWyFaKk/img.png)
입출력 예를 보면서 생각해보자 5월 24일이란 날자는 4월까지는 꽉꽉채워서 지나갔지만?
5월은 아직 진행중이기 때문이다
![](https://blog.kakaocdn.net/dn/FdVCR/btsFVT0yvgv/Ei4yVNSSOewxx3NEUIz3Rk/img.png)
반복문에서 4월까지 다 더해주고 난 다음에 total에 b - 1만큼을 더해주자
왜 -1을 빼서 더해주는걸까?
물론 사람이 계산할때는 total에 b만큼을 더해주고 7을 나눈값의 나머지를 보고
day의 인덱스 중 나머지번째의 인덱스를 골라주면 된다.
하지만 우리는 배열의 첫번째 인덱스가 0부터 시작된다는걸 알고있고 문제대로의 계산이라면
![](https://blog.kakaocdn.net/dn/bwgpVs/btsFV7dp9Gi/nS1l1GkGq4zssKk77KqVkk/img.png)
total % 7 은 5가 나오게 되고
day[5]번쨰 인덱스는 금토일월 '화'가 아니라
금토일월화 '수' 가 되어버리게 된다 그렇기에 total에 b만큼을 더해주면서 -1을 해줘서 day의 5번째 인덱스가 나오게
만들어주자
![](https://blog.kakaocdn.net/dn/q2efV/btsFU6Z9lZp/yl4yxlNcQKhc3gcrayZHW0/img.png)
이렇게 잘 나오게 된다
만약에 아까 total += b -1;에서 -1을 해주지 않았을 경우는?
![](https://blog.kakaocdn.net/dn/dlqoK4/btsFWue47Iw/ANkpac7ENOk3OqkBtkCWYK/img.png)
이렇게 내가 예상하던 요일의 다음 요일이 나와버리게 된다.
끝!
이 아니라
항상 다른 사람의 문제풀이를 보자
![](https://blog.kakaocdn.net/dn/VTyyB/btsFVus9DJT/0EWgCzQYdYZWmiQ7ulb0Ek/img.png)
두줄만에 끝내버렸다
![](https://blog.kakaocdn.net/dn/RMLEY/btsFSaQc2BY/e32kHpL8TsfDuEDMB5LJj1/img.png)
바로 이녀석 DateTime 구조체이다
![](https://blog.kakaocdn.net/dn/nInvb/btsFUqkuLlP/AnkKjNKSh7pevLKlA4Usi1/img.png)
문제를 보자 2016년 a월 b일은 실제로 있는 날 이라고 하는게 이런 뜻이었나 보다
![](https://blog.kakaocdn.net/dn/d8Une8/btsFWtgeuCa/BRej1XgWWUjAyWEqFN2bjK/img.png)
진짜 있는 날이다....
![](https://blog.kakaocdn.net/dn/E16rK/btsFUZz9Lu2/FbtuHEEdlKcVKwXQw2hhy0/img.png)
DateTime은 여러 생성자가 오버로딩되어 있다 그중 저 빨간색 네모의 생성자를 사용한듯 보인다
DateTime 구조체의 새 인스턴스를 연도, 월 및 날짜로 초기화 한다고 한다.
![](https://blog.kakaocdn.net/dn/bYEf1a/btsFUmPYKcx/5VGzt4kxF9ErwClooMirV0/img.png)
DayofWeek의 프로퍼티는 해당 인스턴스가 나타내는 일수를 가져온다고 한다.
![](https://blog.kakaocdn.net/dn/XZBP2/btsFWJb1MsQ/xkfh1kgzYYsOAg3CRx0Hr0/img.png)
이런식으로 나온다!
![](https://blog.kakaocdn.net/dn/F3QLU/btsFWIEcqAP/GZwDbkLo6PgJPaLuVzMLh0/img.png)
dateValue.DayofWeek는 형식이 string이 아니기때문에 string 형인 answer에 바로 넣어줄수가없다
그렇기에 Tostring()을 이용해 string으로 변환해주기로 하자
![](https://blog.kakaocdn.net/dn/crQFmH/btsFUqkuSQN/dNjGLj1lOAwf8pJuDHQt21/img.png)
이러면 잘 들어가게 되고 TuesDay라고 나오기에 앞 3글자만 따와야한다
![](https://blog.kakaocdn.net/dn/bgXgDV/btsFUYgXuSv/gQ0aAQ8IFkjRXgNWH1E1TK/img.png)
시작 인덱스는 0부터 시작해서 길이는 3까지 Substring을 이용해 잘라주자
![](https://blog.kakaocdn.net/dn/FjNb7/btsFUGtQAru/ThqObxhLNrkOkKOfOXDj9K/img.png)
SubString을 이용해 잘라준 answer을 ToUpper()를 이용해 대문자로 만들어주면 문제 해결!
이걸 한방에
![](https://blog.kakaocdn.net/dn/buBhR2/btsFUEW5O5g/KxkZoexqQVHgHVNoPLDp31/img.png)
이런식으로 한줄로 만들수있다
![](https://blog.kakaocdn.net/dn/VTyyB/btsFVus9DJT/0EWgCzQYdYZWmiQ7ulb0Ek/img.png)
하나씩 뜯어보니 대단하다....
오늘도 알고리즘 문제를 풀어보았다
나름 잘 풀었다고 생각했는데 다른 사람 풀이를 보고 또 한번 벽을 느껴버렸다.
제한사항에 실제 있는 날이라는게 저런 의미인줄도 몰랐고
역시 문제를 봐도 아는만큼 뭔가 보이는게 있나보다
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 |