PS 연습

[완전 탐색] 백준 문제 풀이 - 1476 날짜 계산

생선묵김치찌개 2022. 7. 10. 23:33

👩🏻‍💻 문제링크

https://www.acmicpc.net/problem/1476

 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

 

✍️ 아이디어

1. 문제 이해

  • e는 16진수 s는 29진수 m은 20진수 일때 10진수로 e=s=m이 되는 최소값을 구해보자

2. 내가 문제를 풀때는 가장 작은 수에 진수의 수만큼 더하고 가장 작은 수가 2개일 경우 두 수의 진수의 수만큼 더했다

3. 다른사람이 푼 방식은 년도를 하나씩 더하여 year = e+15x임을 이용해 (year-e)%15 == 0 을 조건으로 걸어서 year을 찾아냈다 

 

4. 전체 경우의 수 15 * 28 * 19

✍️소스코드

  • 어거지로 푼 느낌이 강하다(내 코드)
#include <iostream>
using namespace std;

int main()
{
	int e,s,m; cin>>e>>s>>m;
	while(1)
	{
		if(e==s && s==m) break;
		if(e<s && e<m) e+=15;
		else if(s<e && s<m) s+=28;
		else if(m<e && m<s) m+=19;
		else if(e==s && e<m)
		{
			e+=15; s+=28;
		}
		else if(s==m && s<e)
		{
			m+=19; s+=28;
		}
		else if(e==m && m<s)
		{
			e+=15; m+=19;
		}
	}
	cout<<e<<'\n';
}

 

  • 다른 사람의 코드 (year = e+15x = s+28y = m+19z임을 이용함)
#include <iostream>

using namespace std;

 

int E, S, M;

 

int calculateYear(void)

{

        //Year - E = 15*x

        //Year - S = 28*y

        //Year - M = 19*z

        int result;

        int year = 1;

        while (1)

        {

                 if ((year - E) % 15 == 0 && (year - S) % 28 == 0 && (year - M) % 19 == 0)

                 {
                         result= year;
                         break;
                 }
                 year++;
        }
        return result;
}

int main(void)

{

        cin >> E >> S >> M;
        cout << calculateYear() << endl;
        return 0;

}
출처: https://jaimemin.tistory.com/520 [꾸준함:티스토리]

 

체감난이도 걸린시간 참고 사용 문법
20min x 완전 탐색(그냥 다해보기)