본문 바로가기

PS/boj

[BOJ] 4197 Logo

문제 링크

www.acmicpc.net/problem/4197

풀이

위 그림은 2차원 좌표평면에서 $x$축 방향과 이루는 각도가 $\theta$인 상태에서 $x$만큼 걸어가는 경우이다.
그러면 변위는 다음과 같다.

$$ \begin{aligned} \Delta x &= a \cos \theta\\ \Delta y &= a \sin \theta \end{aligned} $$

따라서, $x$축 방향과 이루는 각도를 누적하면서 변위만큼 갱신하고 처음 위치와의 거리를 구하면 된다.

Java 코드

더보기
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder out = new StringBuilder();
        final double PI = Math.acos(-1);

        int T = Integer.parseInt(in.readLine());
        while (T-- > 0) {
            int N = Integer.parseInt(in.readLine());
            int theta = 0;
            double x = 0, y = 0;

            while (N-- > 0) {
                StringTokenizer st = new StringTokenizer(in.readLine());
                String cmd = st.nextToken();
                int val = Integer.parseInt(st.nextToken());

                switch (cmd) {
                    case "fd":
                        x += val * Math.cos(theta * PI / 180);
                        y += val * Math.sin(theta * PI / 180);
                        break;
                    case "bk":
                        x -= val * Math.cos(theta * PI / 180);
                        y -= val * Math.sin(theta * PI / 180);
                        break;
                    case "lt":
                        theta += val;
                        break;
                    case "rt":
                        theta -= val;
                        break;
                }
            }

            out.append(Math.round(Math.sqrt(x * x + y * y)) + "\n");
        }

        System.out.println(out);
    }
}

'PS > boj' 카테고리의 다른 글

[BOJ] 12779 상품 is 뭔들  (0) 2021.01.24
[BOJ] 13430 합 구하기  (0) 2021.01.23
[BOJ] 4141 Numbersrebmun  (0) 2021.01.22
[BOJ] 5637 가장 긴 단어  (0) 2021.01.22
[BOJ] 4176 Digits  (0) 2021.01.22