49. [Java] 간단한 식 계산하기
https://school.programmers.co.kr/learn/courses/30/lessons/181866
- 문자열 binomial이 매개변수로 주어진다.
- binomial은 "a op b" 형태의 이항식이고
- a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나이다.
- 주어진 식을 계산한 정수를 return
- 0 ≤ a, b ≤ 40,000
- 0을 제외하고 a, b는 0으로 시작하지 않는다.
정답코드
class Solution {
public int solution(String binomial) {
// binomial 을 op로 나눈다
// op를 switch-case구문으로 분기해서 각 각 리턴
// 계산기 생각하면 됨
// 정규식으로 숫자만 분리
String[] splited = binomial.split("[+\\-*]");
int num1 = Integer.parseInt(splited[0].trim());
int num2 = Integer.parseInt(splited[1].trim());
// 연산자 추출
char op = ' ';
for (char c : binomial.toCharArray()) {
if (c == '+' || c == '-' || c == '*') {
op = c;
break;
}
}
// op에 따라 계산 분기
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
default:
throw new IllegalArgumentException("지원하지 않는 연산자: " + op);
}
}
}
- 입력된 문자열을
+
,-
,*
기호 기준으로 쪼개서 숫자만 뽑아낸다. - 쪼갠 숫자 두 개를 각각 정수로 변환한다.
- 문자열을 한 글자씩 보면서 첫 번째 나온 연산자를 찾아낸다.
- 찾은 연산자에 따라 덧셈, 뺄셈, 곱셈 중 맞는 계산을 해서 결과를 반환한다.
오답
제목은 간단한 식 계산하기인데 정규이랑 조건문에서 에러가 너무 많이 나서 별도로 정리했다.
- char 타입 초기화 관련
→ https://dainwiki.com/books/whyswiki/page/java-char - swtich-case문 return할 때 break 사용 여부
→ https://dainwiki.com/books/whyswiki/page/java-switch-case-return - [Java] 정규식 - 부호는 범위지정자
→ https://dainwiki.com/books/whyswiki/page/java-L2G/revisions
참고로 코드 연습할 때는 dark모드가 눈이 편한데, 화면 스크린샷이나 에러 메세지 읽을 때는 라이트모드가 편하다.
왜냐하면 콘솔은 어두운 네이비인데 글씨가 어두운 빨간색이라 잘 안보인다. 그래서 라이트모드로 스크린샷해서 정리했다.
프로그래머스에서 좋아요 많이 받은 코드 (김준태, 윤명식 외)
class Solution {
public int solution(String binomial) {
String[] cal = binomial.split(" ");
if (cal[1].equals("+")) {
return (Integer.parseInt(cal[0])) + (Integer.parseInt(cal[2]));
} else if (cal[1].equals("-")) {
return (Integer.parseInt(cal[0])) - (Integer.parseInt(cal[2]));
} else {
return (Integer.parseInt(cal[0])) * (Integer.parseInt(cal[2]));
}
}
}
정규식 안 써도 공백 기준으로 분리하면 3개로 나눠지는구나...