[코테/Java/Lv.0] 각도 합치기

문제
일반적으로 두 선분이 이루는 각도는 한 바퀴를 360도로 하여 표현합니다.
따라서 각도에 360의 배수를 더하거나 빼더라도 같은 각을 의미합니다.
예를 들면, 30도와 390도는 같은 각도입니다.
주어진 코드는 각도를 나타내는 두 정수 angle1과 angle2가 주어질 때,
이 두 각의 합을 0도 이상 360도 미만으로 출력하는 코드입니다.
코드가 올바르게 작동하도록 한 줄을 수정해 주세요.
내 코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int angle1 = sc.nextInt();
int angle2 = sc.nextInt();
int sum_angle = (angle1 + angle2) % 360; // % 360이 수정한 부분
System.out.println(sum_angle);
}
}
풀이
예를 들어 angle1 = 180, angle2 = 290이면 둘이 합쳐 470이다. 합친 값 470을 360으로 나누고 나머지를 출력한다. %는 나눗셈의 나머지를 구하는 연산자이다.
다른 사람 풀이

나랑 같은 코드가 대부분이었는데 댓글에서 '비교 분기'라는 걸 발견했다. 처음 문제를 보고 떠올린 조건문을 사용하는 방식이다. 아래는 클로드에게 도움을 구해 정리한 내용!
비교 분기로 해야하는 이유? (= 더 빠르다)
CPU 입장에서 나눗셈을 수행하는 모듈러 연산(%)은 덧셈/뺄셈/비교 연산보다 훨씬 비용이 큼 (보통 수십~수백 배 느림)
이 문제처럼 두 각도(0~359)를 더한 값이 최대 718을 넘지 않는다는 걸 알고 있다면, 굳이 나눗셈을 쓸 필요 없이 if문으로 "360을 넘으면 360을 빼준다"라고 처리해도 결과는 같다. 이게 바로 비교 분기(comparison branch)로 해결하는 방식.
코드로 비교
모듈러 연산 버전 (원본)
int sum_angle = (angle1 + angle2) % 360;
비교 분기 버전
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int angle1 = sc.nextInt();
int angle2 = sc.nextInt();
int sum_angle = angle1 + angle2;
if (sum_angle >= 360) {
sum_angle -= 360;
}
System.out.println(sum_angle);
}
}
왜 더 빠를까?
- % 연산: 내부적으로 나눗셈 → 나머지 계산 (비용 큼)
- if + -=: 비교 1번, 뺄셈 1번 (비용 매우 작음)
특히 이 문제는 값의 범위가 정해져 있어서 한 번의 뺄셈으로 360 미만으로 만들 수 있음. 그래서 % 대신 if문 하나로 대체가 가능함.
참고: 만약 범위가 더 넓다면?
만약 두 각도의 합이 360을 여러 번 넘을 수도 있는 경우라면, if 한 번으로는 부족하고 while문을 쓸 수 있음.
while (sum_angle >= 360) {
sum_angle -= 360;
}
정리하면, 비교 분기는 나눗셈 연산을 피하고 조건문과 뺄셈으로 같은 결과를 얻어내는 최적화 기법. 알고리즘 문제에서는 이런 사소해 보이는 연산 하나가 시간 제한 통과 여부를 가르는 경우도 있음.
'etc.' 카테고리의 다른 글
| [코테/Java/Lv.0] 특수문자 출력(Escape Sequence) (0) | 2026.08.08 |
|---|---|
| [코테/Java/Lv.0] 문자열 반복 출력과 .repeat() 메서드 (0) | 2026.08.06 |
| [Windows PowerShell] 띄어쓰기가 있는 디렉터리명으로 이동 (0) | 2023.12.08 |
| [MongoDB] TimeOutException 해결하기 (0) | 2023.08.25 |
| 개발 환경 세팅 (롬복 Lombok 설치) (0) | 2023.08.21 |