πŸ•οΈ PS (BOJ)/Bruteforce

[BOJ][C++] λ°±μ€€ 6064번: μΉ΄μž‰ 달λ ₯

선달 2024. 8. 12. 17:48
λ°˜μ‘ν˜•

 

μ΅œκ·Όμ— ICPC νƒμ‚¬λŒ€λŠ” λ‚¨μ•„λ©”λ¦¬μΉ΄μ˜ μž‰μΉ΄ 제ꡭ이 λ†€λΌμš΄ λ¬Έλͺ…을 μ§€λ‹Œ μΉ΄μž‰ μ œκ΅­μ„ ν† λŒ€λ‘œ ν•˜μ—¬ μ„Έμ›Œμ‘Œλ‹€λŠ” 사싀을 λ°œκ²¬ν–ˆλ‹€. μΉ΄μž‰ 제ꡭ의 백성듀은 νŠΉμ΄ν•œ 달λ ₯을 μ‚¬μš©ν•œ κ²ƒμœΌλ‘œ μ•Œλ €μ Έ μžˆλ‹€. 그듀은 Mκ³Ό N보닀 μž‘κ±°λ‚˜ 같은 두 개의 μžμ—°μˆ˜ x, yλ₯Ό κ°€μ§€κ³  각 년도λ₯Ό <x:y>와 같은 ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•˜μ˜€λ‹€. 그듀은 이 μ„Έμƒμ˜ μ‹œμ΄ˆμ— ν•΄λ‹Ήν•˜λŠ” 첫 번째 ν•΄λ₯Ό <1:1>둜 ν‘œν˜„ν•˜κ³ , 두 번째 ν•΄λ₯Ό <2:2>둜 ν‘œν˜„ν•˜μ˜€λ‹€. <x:y>의 λ‹€μŒ ν•΄λ₯Ό ν‘œν˜„ν•œ 것을 <x':y'>이라고 ν•˜μž. 만일 x < M 이면 x' = x + 1이고, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ x' = 1이닀. 같은 λ°©μ‹μœΌλ‘œ 만일 y < N이면 y' = y + 1이고, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ y' = 1이닀. <M:N>은 κ·Έλ“€ 달λ ₯의 λ§ˆμ§€λ§‰ ν•΄λ‘œμ„œ, 이 해에 μ„Έμƒμ˜ 쒅말이 λ„λž˜ν•œλ‹€λŠ” μ˜ˆμ–Έμ΄ μ „ν•΄ μ˜¨λ‹€.

예λ₯Ό λ“€μ–΄, M = 10 이고 N = 12라고 ν•˜μž. 첫 번째 ν•΄λŠ” <1:1>둜 ν‘œν˜„λ˜κ³ , 11번째 ν•΄λŠ” <1:11>둜 ν‘œν˜„λœλ‹€. <3:1>은 13번째 ν•΄λ₯Ό λ‚˜νƒ€λ‚΄κ³ , <10:12>λŠ” λ§ˆμ§€λ§‰μΈ 60번째 ν•΄λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

λ„€ 개의 μ •μˆ˜ M, N, x와 yκ°€ μ£Όμ–΄μ§ˆ λ•Œ, <M:N>이 μΉ΄μž‰ 달λ ₯의 λ§ˆμ§€λ§‰ 해라고 ν•˜λ©΄ <x:y>λŠ” λͺ‡ 번째 ν•΄λ₯Ό λ‚˜νƒ€λ‚΄λŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ.

μž…λ ₯

μž…λ ₯ λ°μ΄ν„°λŠ” ν‘œμ€€ μž…λ ₯을 μ‚¬μš©ν•œλ‹€. μž…λ ₯은 T개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Tκ°€ μ£Όμ–΄μ§„λ‹€. 각 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λŠ” ν•œ μ€„λ‘œ κ΅¬μ„±λœλ‹€. 각 μ€„μ—λŠ” λ„€ 개의 μ •μˆ˜ M, N, x와 yκ°€ μ£Όμ–΄μ§„λ‹€. (1 ≤ M, N ≤ 40,000, 1 ≤ x ≤ M, 1 ≤ y ≤ N) μ—¬κΈ°μ„œ <M:N>은 μΉ΄μž‰ 달λ ₯의 λ§ˆμ§€λ§‰ ν•΄λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

좜λ ₯

좜λ ₯은 ν‘œμ€€ 좜λ ₯을 μ‚¬μš©ν•œλ‹€. 각 ν…ŒμŠ€νŠΈ 데이터에 λŒ€ν•΄, μ •μˆ˜ kλ₯Ό ν•œ 쀄에 좜λ ₯ν•œλ‹€. μ—¬κΈ°μ„œ kλŠ” <x:y>κ°€ k번째 ν•΄λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것을 μ˜λ―Έν•œλ‹€. 만일 <x:y>에 μ˜ν•΄ ν‘œν˜„λ˜λŠ” ν•΄κ°€ μ—†λ‹€λ©΄, 즉, <x:y>κ°€ μœ νš¨ν•˜μ§€ μ•Šμ€ ν‘œν˜„μ΄λ©΄, -1을 좜λ ₯ν•œλ‹€.

 

풀이

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

int GCD(int a, int b) {
    if(a==0) {
        return b;
    }
    return GCD(b%a, a);
}

int LCM(int a, int b) {
    return (a*b)/GCD(a,b);
}

int solution(int m, int n, int x, int y) {
    for(int i=x; i<=LCM(m,n); i+=m) {
        int tmp = i % n;
        
        if(tmp==0) {
            tmp = n;
        }
        
        if(tmp==y) {
            return i;
        }
    }
    return -1;
}

int main() {
	int t, m,n,x,y;
	cin >> t;
	while(t--) {
	    cin >> m >> n >> x >> y;
	    cout << solution(m, n, x, y) << "\n";
	}

    return 0;
}

 

μ‹œν–‰μ°©μ˜€

λ…Έκ°€λ‹€λ‘œ κ΅¬ν˜„ν–ˆλ”λ‹ˆ μ‹œκ°„μ΄ˆκ³Όκ°€ λ–΄λ‹€

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

int solution(int m, int n, int x, int y) {
    int tmpx=0, tmpy=0, ans=0;
    while(true) {
        tmpx++;
        tmpy++;
        ans++;
        
        if(tmpx>m) tmpx=1;
        if(tmpy>n) tmpy=1;

        if(tmpx==x && tmpy==y) {
            return ans;
        }
        
        if(tmpx==m && tmpy==n) {
            return -1;
        }
    }
}

int main() {
	int t, m,n,x,y;
	cin >> t;
	while(t--) {
	    cin >> m >> n >> x >> y;
	    cout << solution(m, n, x, y) << "\n";
	}

    return 0;
}
λ°˜μ‘ν˜•