반응형
반응형
(JAVA)
0. 문제 및 입출력 예제
문제
my_string은 "3 + 5"처럼 문자열로 된 수식입니다.
문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
제한사항
연산자는 +, -만 존재합니다.
문자열의 시작과 끝에는 공백이 없습니다.
0으로 시작하는 숫자는 주어지지 않습니다.
잘못된 수식은 주어지지 않습니다.
5 ≤ my_string의 길이 ≤ 100
my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
my_string에는 연산자가 적어도 하나 포함되어 있습니다.
return type 은 정수형입니다.
my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.
입출력 예
3 + 4 = 7을 return 합니다.
1. 문제 분석
- 문자열을 분리해야한다. > 공백기준으로
- 분리하고 문자와 연산자를 분리해야한다.
- + 의 경우와 - 경우 모두 생각해야한다.
2. 방법
처음에는 어떻게 풀어야할지 막막해서 gpt 한테 물어보니 ScriptEngineManager 를 사용하면 바로 String 을 계산해준다해서 솔깃햇다 .ㅎㅎㅎ
하지만 찾아보니까 사실 이건 알고리즘이라고 할 수는 없고 이런 기능도 있구나, 이렇게 코드를 작성할 수 있구나까지만 생각해도 좋을 것 같아서 다른 방법으로 풀어보았다.
ScriptEngineManager 방법으로 푼 다른 사람의 게시글 🖌
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
class Solution {
public int solution(String my_string) {
int answer = 0;
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String expression = my_string;
try {
Object result = engine.eval(expression);
if (result instanceof Integer) {
answer = (Integer) result;
} else if (result instanceof Double) {
answer = ((Double) result).intValue();
}
} catch (ScriptException e) {
e.printStackTrace();
}
return answer;
}
}
두번째로 풀어본 방식은 처음에 생각한것처럼 split 을 사용하여 공백 기준으로 배열에 넣어준다.
우선 기본적으로 연산자체크, 값유지용 num, +/- 부호 구분용 sign 변수를 선언해주고 진행했다.
배열을 반복하면서 연산자 체크를 한 후 연산자에 따라 *1 을 할지 *(-1) 을 할지 결정해주었다.
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] strArray = my_string.split(" ");
int num = 0;
boolean isOperator = false;
int sign = 1;
for(String array : strArray){
try {
int number = Integer.parseInt(array) * sign;
if(isOperator){
answer += num;
num = number;
isOperator = false;
}else {
num = number;
}
} catch(NumberFormatException e) {
if(array.equals("+")){
isOperator = true;
sign = 1;
} else if (array.equals("-")){
isOperator = true;
sign = -1;
}
}
}
if(!isOperator){
answer += num;
}
return answer;
}
}
3. 느낀점
알고리즘에 정답은 없지만 직접 구현이 중요하기에 머리를 많이 굴리고 많이 찾아보고 많이 정리해두자!
반응형
'알고리즘 > 프로그래머스:LV00' 카테고리의 다른 글
[LV00] 자릿수 더하기 (0) | 2023.11.24 |
---|---|
[LV00] n의 배수 고르기 (0) | 2023.11.24 |
[LV00] 숨어있는 숫자의 덧셈(1) (1) | 2023.11.20 |
[LV00] 숨어있는 숫자의 덧셈(1) (1) | 2023.11.04 |
[LV00] 문자열 정렬하기(1) (0) | 2023.11.04 |