๐Ÿ•๏ธ ICPC Sinchon/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;
}
๋ฐ˜์‘ํ˜•