본문 바로가기

Algorithm/SWEA

[SWEA] 7532번 세영이의 SEM력 연도 (C++)

728x90
반응형

시간초과 코드

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
	int test_case;
	int T;
	cin>>T;

	for(test_case = 1; test_case <= T; ++test_case)
	{
		int s, e, m;
        cin >> s >> e >> m;
        
        int num = 1;
        while(true){
            if((num - s) % 365 == 0 && (num - e) % 24 == 0 && (num - m) % 29 == 0) break;
            num++;
        }
		cout << "#" << test_case << " " << num << endl;
	}
	return 0;
}

 

num을 하나씩 증가시키며 비교하면 시간 초과가 발생한다.

 

수정한 코드

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
	int test_case;
	int T;
	cin>>T;

	for(test_case = 1; test_case <= T; ++test_case)
	{
		int s, e, m, k;
		cin >> s >> e >> m;
        
		for(k = s; ; k += 365){
			if((k - e) % 24 == 0 && (k - m) % 29 == 0) break;
		}
		cout << "#" << test_case << " " << k << '\n';
	}
	return 0;
}

 

k = 365*x+s = 24*y+e = 29*m+m

x를 하나 증가시키는 것은 k를 365 증가시키는 것과 같으므로 k에 365를 더해가며 실행 시간을 줄였다.

728x90
반응형

'Algorithm > SWEA' 카테고리의 다른 글

[SWEA] 2948번 문자열 교집합 (C++)  (0) 2023.11.18
[SWEA] 3233번 정삼각형 분할 놀이 (C++)  (0) 2023.11.18