나 개발자 진짜 되냐?

백준 C++ 1924번 2007년 ( switch, 배열 출력 ) 본문

C++을 시작해봐요!/구현문제를 풀어봤어요!

백준 C++ 1924번 2007년 ( switch, 배열 출력 )

Snow Rabbit 2026. 1. 6. 22:34

 

오늘은 2026년....인데

문제는 2007년도다

ㅋㅋㅋㅋ 거의 20년 전이네..

2007년도로 돌아가고 싶다.

가족끼리 도란도란 즐거운 시간 보내던 때가 좋았다.

 

... 그립다

그리워해도 돌아가지 못한다는 게 참 아쉽다

시간을 참 절대적인 거 같다.

돌아가지도 넘어가지도 못한다는 게

 

오래오래 그 자리에 머물고 싶다.

오래오래..


 

 

생각보다 쉬울 줄 알았던 문제는 생각보다 난관에 봉착했다.

 

고민인 건 31일까지는 %7로 해서 구할 수 있지만

2월 1일은 달이 넘어가는데 어떻게 계산하지? 였다.

 

지피티에게 고민 끝에 물어보니

일수를 배열로 하라고 말해주었다.

 

하지만 나, 말을 잘 들을 리가 없지

ㅋㅋㅋㅋ 일수만 보고 

아 다 더하고 나누면 되려나? 했다.

 

그리고 혼났다.

전체일 수를 다 더하라는 게 아니라

필요한 부분만큼 월의 일수를 구하기 위한 배열을 만들라는 것이었다.

 

ㅋㅋㅋㅋㅋ바보....

 

그래서 열심히 고친 문제

 

큰 문제점 2가지

 

1. 우리는 m월 이전까지의 숫자만 더해주고

m월의 일을 더해주지 않았다...ㅋㅋㅋ

 

sum += d가 필요하다.

 

그다음에 switch문에서 break를 안 해주면

 case문을 다 돈다고 한다.

그래서 break가 필수적으로 들어가 줘야 한다.

 

하지만 지피티는 스위치문으로 풀라고 하지 않았다.

새로운 방법을 알려주었다.

 

먼저 이거부터다.

문제의 기준이 1월 1일 월요일이기 때문에

1월 1일0일을 세는 거라

d - 1이 된다.

1월 2일은 1일이 기준인데 2일 하루 지났으니

2-1 =1 이 된다.

3일도 마찬가지다. 1일 기준으로 이틀이 지났으니 3-1 =2로 계산된다.

 

아까도 충분히 됐는데 이 방법을 쓰는 이유가 뭘까?

 

위에도 말했듯 1월 1일 월요일이 기준이기 때문에

문제에 맞게 풀려면 기준을 1일로 잡고 0일이 지났으니 0부터 mon을 해줘야 한다 이 말이다.

그럼 사실 스위치도 0을 mon으로 잡으면 되긴 한다.

 

근데 웃긴 건

이걸 한 줄로 정리해 주는 좋은 친구가 있다고 한다.

 

그것은 배열을 요일별로 정리해 두고

cout으로 꺼내는 것이다.

 

 

이렇게 해주면 0이 월이 되며 정상적으로 출력이 된다.

 

 

헉 이렇게 간단하다니...ㅋㅋ

 

간단한 문제가 아니었지만? 글자가 조금 줄어드니 되게 간단해 보인다.

 

그리고 뭔가 cout에서 출력할 때 저렇게 배열의 값이 출력되는 건 물론이고

저 안에서 계산해서 바로 출력이 되는 것도 놀라웠다.

 

하나 또 배워간다.

 

2007년을 기억하며 오늘은 자야겠다.

고생했다 오늘 하루도 :)