본문 바로가기
코딩테스트 준비/백준

[백준] 23756번 - 노브 돌리기 [Java]

by mwzz6 2024. 12. 10.

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

 

[백준] 23756번 - 노브 돌리기 [Java]
[백준] 23756번 - 노브 돌리기 [Java]


1.  아이디어

 

시계 방향으로 돌리는게 최소일때와 반시계 방향으로 돌리는게 최소일때를 구분해서 해결했다.


2. 문제풀이

 

현재 위치에서 노브의 각도와 다음 위치에 해당하는 노브의 각도 차이만큼 돌리는게 기본이다.

이때 시계 방향 또는 반시계 방향 둘 중 하나가 최솟값이 되고 돌리는 과정에서 0도 위치를 지나는 경우 단순한 각도 차로 계산하면 오류가 발생한다. 이를 방지하기 위해 각도 차에 360도를 더해서 각도 차를 양수로 만들고 이를 다시 360도로 나누어서 각도 차가 0 ~ 360 이내에 들어오게 하는 방식으로 구현했다.


3. 코드

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int A0 = Integer.parseInt(br.readLine());
        int sum = 0;

        for (int i = 1; i <= N; i++) {
            int An = Integer.parseInt(br.readLine());

            sum += Math.min(((An + 360) - A0) % 360, ((A0 + 360) - An) % 360);
            A0 = An;
        }

        System.out.println(sum);
    }
}

4. 후기