์ํ์ฒ ๋ ๊ตฌ๊ตฌํ
https://www.acmicpc.net/problem/1393
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋ง์ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 128 MB | 445 | 64 | 57 | 29.082% |
๋ฌธ์
์ต๋ฐฑ์ค์ ์ํ์ฒ ๋ ๊ตฌ๊ตฌํ์ ํ๋ค.
๋ฌธ์ ๋ ๊ตฌ๊ตฌํ์ ๊ธฐ์ฅ์ธ ์กฐ๊ต ๊น์ฌํ์ด ๋ฐ์ฏค ๋ฏธ์ณ์ ์ด์ฐจ๋ฅผ ๋ฉ์ถ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ต๋ฐฑ์ค์ ๋ฌ๋ฆฌ๊ณ ์๋ ์ด์ฐจ์์ ๋ฐ์ด๋ด๋ ค์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ์ด๋ด๋ฆด ๋ ์ ๋ฅ์ฅ ๊น์ง ๊ฑฐ๋ฆฌ๊ฐ ๋๋ฌด ๋ฉ๋ฉด ๋ง์ด ์ํ ์ ์๋ค.
๊ทธ๋์ ์ฒ ๋๊ฐ ์ ๋ฅ์ฅ์ ๊ฐ์ฅ ๋ง์ด ๊ทผ์ ํ์ ๋ ๋ฐ์ด๋ด๋ฆฌ๊ณ ์ ํ๋ค.
์ด๋์ ๋ฐ์ด๋ด๋ ค์ผ ํ๋๊ฐ?
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ ๋ฅ์ฅ์ ์์น x y๊ฐ ์ฃผ์ด์ง๊ณ , ๋์งธ ์ค์๋ ํ์ฌ ์ด์ฐจ์ ์์น X Y์ ์ด์ฐจ๊ฐ ์ด๋ง๋ค ์ด๋ํ๋ x์ขํ y์ขํ๊ฐ ์ฃผ์ด์ง๋ค. ์ด์ฐจ๋ ํญ์ ์ง์ ์ผ๋ก ์์ง์ธ๋ค.
์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ -100์ด์, 100์ดํ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ต๋ฐฑ์ค์ด ๋ฐ์ด๋ด๋ฆฌ๋ ์์น๋ฅผ ์ถ๋ ฅํ๋ค. ์ ๋ต์ ํญ์ ์ ์์ด๋ค.
์ฃผ์ ํ ์
- 1์ด ๋จ์๋ก ๋ฐ์ด๋ด๋ฆด ์ ์๋ ๊ฒ์ด ์๋๋ค.
- ๊ธฐ์ฐจ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ๊ฐ๋ค.
๋์ ๋ต
์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int x_pt, y_pt, X, Y, del_x, del_y;
double dist;
pair<int, int> near_point;
double getDistance(int x, int y) {
double tmp = pow((x - x_pt), 2) + pow((y - y_pt), 2);
return tmp;
}
void findNearDist() {
double x = X; double y = Y;
while (1) {
x += del_x;
y += del_y;
double tmp = getDistance(x, y);
if (tmp > dist) { // ๊ฑฐ๋ฆฌ๊ฐ ์ฆ๊ฐํ์ผ๋ฉด
break;
}
else {
dist = tmp;
near_point.first = x; near_point.second = y;
}
}
}
void fixDel() {
int small = min(del_x, del_y);
// ๋ ์ค ํ๋๊ฐ 0์ด๋ฉด ๋๋จธ์ง๋ 1 (์ค์!)
if (small == 0) {
if (del_x == 0)
del_y = 1;
else
del_x = 1;
return;
}
// ๋ ๋ค 0์ด ์๋๋ฉด ์ต๋๊ณต์ฝ์๋ก ๋๋ ์ฃผ๊ธฐ
while (small) {
if (del_x%small == 0 && del_y%small == 0) {
break;
}else
small--;
}
if (small > 1) {
del_x /= small; del_y /= small;
}
}
int main() {
cin >> x_pt >> y_pt;
cin >> X >> Y >> del_x >> del_y;
dist = getDistance(X, Y); // ์ฒซ๋ฒ์งธ ์์น์์์ ๊ฑฐ๋ฆฌ
near_point.first = X; near_point.second = Y;
fixDel();
if(del_x!=0 || del_y!=0)
findNearDist();
// ๋๋ค 0์ด๋ฉด ๊ทธ๋ฅ ์ถ๋ ฅ
cout << near_point.first << " " << near_point.second;
}
ํ ์คํธ์ผ์ด์ค
100 102
0 0 0 0
=> 0 0
5 2
2 1 2 4
=> 3 3
5 2
2 1 1 1
=> 4 3
50 72
0 0 7 3
=> 70 30
50 72
0 0 0 4
=> 0 72
50 72
0 0 4 0
=> 50 0
๋ค๋ฅธ ๋ต
brute force๋ก๋ ํ ์ ์๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 11054 :: ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (1) | 2021.03.06 |
---|---|
[c++] BOJ 13023 :: ABCDE (ํ ์คํธ์ผ์ด์ค, ์ฝ๋) (0) | 2020.05.06 |
[c++] BOJ 1107๋ฒ :: ๋ฆฌ๋ชจ์ปจ (์ฝ๋, ํ ์คํธ์ผ์ด์ค) (0) | 2020.05.02 |
[c++] BOJ 1309๋ฒ :: ๋๋ฌผ์ (0) | 2020.04.25 |
[c++] BOJ 1461๋ฒ :: ๋์๊ด (0) | 2020.04.23 |
Comment