문제 설명
직사각형에서 탈출
해결 방법
w - x, h - y 중에 더 작은 값을 a라 하고 x, y중에 더 작은 값을 b라 하면 a와 b 중 더 작은 값이 최소거리이다.
💻소스코드
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int x, y, w, h;
int a, b;
cin >> x >> y >> w >> h;
a = min(w - x, h - y);
b = min(x, y);
cout << min(a, b) << "\n";
return 0;
}
문제 설명
네 번째 점
해결 방법
직사각형이 만들어질려면 x 좌표와 y 좌표가 같은 값이 각각 2개씩 있으면 된다.
세 점의 좌표를 입력으로 받아서 두 점의 x좌표와 y좌표가 같다면 나머지 하나를 출력한다.
💻소스코드
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
if (x1 == x2)
cout << x3 << " ";
else if (x1 == x3)
cout << x2 << " ";
else
cout << x1 << " ";
if (y1 == y2)
cout << y3 << "\n";
else if (y1 == y3)
cout << y2 << "\n";
else
cout << y1 << "\n";
return 0;
}
문제 설명
직각삼각형
해결 방법
입력으로 받은 세 변의 길이 중 어떤 값이 가장 큰지 모르니 먼저 가장 큰 값을 찾는 과정을 분기로 나눈 후 피타고라스 정리를 이용한다.
💻소스코드
#include <iostream>
using namespace std;
int main()
{
// 직각삼각형
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (true) {
int a, b, c;
cin >> a >> b >> c;
if (a == 0 && b == 0 && c == 0)
break;
if (a > b && a > c) {
if (b * b + c * c == a * a)
cout << "right\n";
else
cout << "wrong\n";
}
else if (b > a && b > c) {
if (a * a + c * c == b * b)
cout << "right\n";
else
cout << "wrong\n";
}
else if (c > a && c > b) {
if (a * a + b * b == c * c)
cout << "right\n";
else
cout << "wrong\n";
}
}
return 0;
}
문제 설명
참외밭
해결 방법
육각형의 넓이를 구한 후 입력으로 들어온 K 값을 곱하면 된다.
육각형의 넓이는 큰 사각형의 넓이에서 비어있는 작은 사각형의 넓이를 빼서 구한다.
입력으로 들어온 6개의 값을 벡터에 push_back 한 후 벡터를 순회하면서 곱이 가장 큰 값을 구한다.
이 때의 앞선 인덱스i
를 check에 저장해둔다.
작은 사각형의 넓이는 구조 상 i의 3번째, 4번째 변의 길이의 곱일 수 밖에 없다.
💻소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
// 참외밭
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// K: 단위 면적 당 자라는 참외의 수, direc: 방향, length: 변의 길이
int K, direc, length;
// big_sq: 육각형에서 큰 사각형, little_sq: 육각형에서 작은 사각형, check: 큰 사각형을 이루는 변의 인덱스
int big_sq = 0, little_sq = 0, check = 0;
vector<pair<int, int>> v;
cin >> K;
for (int i = 0; i < 6; i++) {
cin >> direc >> length;
v.push_back({direc, length}); // 방향, 길이
}
// 곱한 값중 가장 큰값을 저장
// 마지막 입력과 첫 번째 입력의 곱이 가장 큰 사각형이 될 수 있음을 인지 !
for (int i = 0; i < 6; i++) {
if (big_sq < v[i].second * v[(i + 1) % 6].second) {
big_sq = v[i].second * v[(i + 1) % 6].second;
check = i;
}
}
// 큰 사각형의 한 변 인덱스의 +3, 4번째 변의 곱이 작은 사각형일 수 밖에 없음.
little_sq = v[(check + 3) % 6].second * v[(check + 4) % 6].second;
cout << (big_sq - little_sq) * K << "\n";
return 0;
}