본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver II] 28038번 - 2차원 좌표변환

[문제 위치]

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

[문제 풀이]

이 문제는 직교좌표계와 극좌표계 사이에서 좌표를 변환하는 문제입니다. 각 테스트 케이스마다 주어진 좌표를 다른 좌표계로 변환하여 결과를 출력해야 합니다. 직교좌표계를 극좌표계로, 혹은 그 반대로 변환하는 공식이 사용됩니다.

접근 방식:

  1. 각 테스트 케이스의 좌표계 유형과 좌표를 입력받습니다.
  2. 주어진 좌표를 다른 좌표계로 변환합니다.
  3. 변환된 좌표를 출력합니다.
#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

const double PI = acos(-1);

int main() {
    int T;
    cin >> T;
    cout << fixed << setprecision(8);

    while (T--) {
        int type;
        double a, b;
        cin >> type >> a >> b;

        if (type == 1) {
            // 직교좌표계 (x, y) -> 극좌표계 (r, θ)
            double x = a, y = b;
            double r = sqrt(x * x + y * y);
            double theta = atan2(y, x);
            if (theta < 0) theta += 2 * PI;
            cout << r << " " << theta << endl;
        } else if (type == 2) {
            // 극좌표계 (r, θ) -> 직교좌표계 (x, y)
            double r = a, theta = b;
            double x = r * cos(theta);
            double y = r * sin(theta);
            cout << x << " " << y << endl;
        }
    }

    return 0;
}