TIL
[TIL]연산자 처리
높하늬바람
2025. 5. 14. 09:42
TIL - 2025.03.04
오늘 배운 것 개요
오늘은 Java 콘솔 기반 계산기의 기능을 확장하고, 다양한 연산 기능을 추가하는 작업을 수행
특히 연산자 처리 방식 개선, 오류 해결, 그리고 프로그래머스 문제 풀이를 진행하며 Java의 기본 문법과 활용 방법을 익혔다.
1. 연산자 처리 방식 개선
문제점
OperatorType
에서sqrt
와sin
이 동일한's'
로 매핑되어 있어 연산자가 올바르게 구별 불가.App.java
에서parsed[0].charAt(0)
을 사용하여 연산자를 찾다 보니, 같은 앞글자를 가진 연산자(sqrt
vssin
)를 구별할 수 없었음.
해결 방법
OperatorType
에서sqrt
를'q'
로 변경하여sin
과 구별parseExpression()
에서sqrt
를"qrt"
로 변환하여OperatorType
과 일치App.java
에서getOperatorType(parsed[0])
을 직접 호출하여 문자열을 전달하도록 수정
public enum OperatorType {
add('+'), sub('-'), mul('*'), div('/'),
pow('^'), mod('%'),
log('l'), sin('s'), cos('c'), tan('t'), sqrt('q'); // sqrt를 'q'로 변경하여 충돌 방지
}
이제 sqrt(45)
를 입력하면 sin(45)
로 출력되지 않고, 정확한 결과 출력
2. 새로운 연산 기능 추가
삼각함수 (sin
, cos
, tan
) 지원
Math.toRadians()
를 활용하여 도 단위를 라디안 단위로 변환 후 계산result = Math.sin(Math.toRadians(fstValDouble)); result = Math.cos(Math.toRadians(fstValDouble)); result = Math.tan(Math.toRadians(fstValDouble));
- 이제
sin(30)
,cos(45)
,tan(60)
이 정확한 값출력*
거듭제곱 (pow
), 나머지 (mod
) 연산 추가
result = Math.pow(fstValDouble, sndValDouble); // 거듭제곱
result = fstValDouble % sndValDouble; // 나머지 연산
이제 2^3 = 8
, 10 % 3 = 1
연산을 수행 가능
3. 프로그래머스 문제 풀이
문제 1: 두 정수의 합
class Solution {
public long solution(int a, int b) {
long sum = 0;
int start = Math.min(a, b);
int end = Math.max(a, b);
for (int i = start; i <= end; i++) {
sum += i;
}
return sum;
}
}
모든 정수를 더하는 for
문을 활용하여 해결
문제 2: 짝수와 홀수 판별
class Solution {
public String solution(int num) {
return (num % 2 == 0) ? "Even" : "Odd";
}
}
삼항 연산자를 활용하여 간결하게 해결
4. 오늘 느낀 점 & 개선할 부분
- 연산자 매핑이 겹치면 처리 순서에 따라 잘못된 결과가 나올 수 있다는 점을 다시 한 번 확인함.
Math.toRadians()
를 사용하지 않으면 삼각함수 계산이 잘못될 수 있음을 알게 됨.Math.pow()
,Math.toRadians()
같은 내장 메서드를 적극 활용하면 코드를 훨씬 간결하게 만들 수 있음.- 프로그래머스 문제 풀이를 통해 반복문, 삼항 연산자,
Math
유틸리티 함수 활용법을 복습할 수 있었음. - 다음 목표: 괄호 연산과 다항식 연산(
2 + 3 * 4
)을 적용하여 계산기를 더욱 발전시키기!