1476번: 날짜 계산
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타
www.acmicpc.net
code.plus에 BruteForce 문제로 분류되어 있기는 한데 난 그것보다는 그냥 간단한 구현 문제 정도로 느꼈다. 여태 엥? 브루트포스로 분류? 하면 기계처럼 갖다대려 용쓰던 재귀호출을 안 써서 그런가. 아무래도 좀 더 유연한 사고를 해야 한다.
함정 하나 정도를 제외하면 간단하다. year=1년부터 계속 무한반복문을 통해 modulo 연산을 통해 year%(각 변수의 크기)의 값이 각각 주어진 값과 같을 때까지 year+1씩 더하며 확인하면 된다.
문제는 정확하게 나머지가 0인 경우이다. 가령 E의 경우 1<=E<=15이므로 1,2,3...,15 식으로 계속 연차가 쌓이다가 16번째부터 다시 1이 되어야 하는데, 나머지 연산의 경우는 1,2,3,..,14,0,1,... 이런 식으로 올라가기 때문에 주어진 값이 정확히 15일 때 스택오버플로우에 빠진다.
이를 위해 year%15==0인 경우 modulo_E = 15 코드를 추가하고, 타 변수도 똑같이 조치해준 뒤 무한반복문을 돌려 가며 해결했다.
아래 코드 첨부하고 마친다. 참고로 이번이 처음으로 C++로 풀어 본 문제이다. 앞으로 아직까지는 Java를 우선적으로 쓰더라도 C++로 계속 도전해 보면서 익혀 나가려 한다.
#include <iostream>
using namespace std;
int main()
{
int E;
int S;
int M;
int answer;
cin >> E >> S >> M;
int year = 1;
while (true) {
int modulo_E = year % 15;
int modulo_S = year % 28;
int modulo_M = year % 19;
if (modulo_E == 0) {
modulo_E = 15;
}
if (modulo_S == 0) {
modulo_S = 28;
}
if (modulo_M == 0) {
modulo_M = 19;
}
if (modulo_E == E && modulo_S == S && modulo_M == M) {
cout << year << endl;
break;
}
else {
year++;
}
}
}
'프로그래밍 > 백준 복기' 카테고리의 다른 글
[BruteForce] 백준 14500: 테트로미노 (0) | 2022.10.03 |
---|---|
[BruteForce] 백준 6064: 카잉 달력 (0) | 2022.10.02 |
[BruteForce] 백준 3085: 사탕 게임 (0) | 2022.09.07 |
[BruteForce] 백준 16198: 에너지 모으기 (0) | 2022.08.02 |
[BFS] 백준 16948 : 데스 나이트 (0) | 2022.08.02 |