나는 이 방법을 어떻게 해결 했냐!
일단 10x10x10만 되게 하자.. 라는 생각으로 그냥 이것만 되라~ 라는 생각으로 풀어보았어
- 처음으로 생각한건 if와 else로 조건을 붙이자 라고 생각했는데, 문자열안에 *가 들어가있으면 if문을 실행하고 아니면 else로 실행하도록 설계를 해봤어
- 먼저 숫자 3개니까 *로 자르고 일단 배열에다가 자른 값들을 넣어줬어. 그런 다음 배열 안 에 있는 값들을 곱해줬다고 생각하면 돼
- -가 나오면 + - 로 바꾸고 +로 자른 값을 배열에 담아줬어 그리고 값을 더해주면 내가 원하는 값이 나오게 되었어.
이 문제는 뭔가 정답은 맞췄는데 억지로 맞추는 느낌이야..
public static int run(String exp) {
if(exp.contains("*")) {
String[] bits = exp.split(" \\* ");
System.out.println(bits.length);
System.out.println(bits[0] + "*" + bits[1] + "*" + bits[2]);
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
int c = Integer.parseInt(bits[2]);
System.out.println(a + "*" + b + "*" + c);
return a * b * c;
}
else{
exp = exp.replace("- ", "+ -");
String[] bits = exp.split(" \\+ ");
int a = Integer.parseInt(bits[0]);
System.out.println(bits[0]);
int b = Integer.parseInt(bits[1]);
int c = 0;
if (bits.length > 2) {
c = Integer.parseInt(bits[2]);
}
return a + b + c;
}
}
내꺼가 마음에 안들어서 강사님이 하신 풀이법 알려줄게
package org.example;
public class Calc {
public static int run(String exp) {
boolean needToMulti = exp.contains("*");
boolean needToPlus = exp.contains("+");
if (needToPlus) {
exp = exp.replace("- ", "+ -");
String[] bits = exp.split(" \\+ ");
int sum = 0;
for (int i = 0; i < bits.length; i++) {
sum += Integer.parseInt(bits[i]);
}
return sum;
} else if (needToMulti) {
String[] bits = exp.split(" \\* ");
int sum = 1;
for (int i = 0; i < bits.length; i++) {
sum *= Integer.parseInt(bits[i]);
}
return sum;
}
throw new RuntimeException("해석 불가 : 올바른 계산식이 아닙니다");
}
}
강사님은 반복문을 돌면서 자동으로 연산이 되도록 수행하셨어! 확실히 반복해서 하는게 좀 더 깔끔하고 좋은 코드가 맞는것 같아 하지만 여기서의 문제점은 +로 구성된 연산들은 되지만 저번에 했던 -가 포함된 연산은 오류가 날거야.. 원래 내가 풀이 했던거를 좀 추가해서 살짝 수정해줬어
if (needToMulti) {
String[] bits = exp.split(" \\* ");
int sum = 1;
for (int i = 0; i < bits.length; i++) {
sum *= Integer.parseInt(bits[i]);
}
return sum;
}
else {
exp = exp.replace("- ", "+ -");
}
String[] bits = exp.split(" \\+ ");
int sum = 0;
for (int i = 0; i < bits.length; i++) {
sum += Integer.parseInt(bits[i]);
}
return sum;
}
이렇게 if문안에를 *가 포함되었을때로 바꾸고 else로 둬서 나머지를 수행하도록 만들었어.
이번에는 세자리 숫자를 더하거나 곱하거나 이거야!
그래서 내가 생각한거는
- 지금 까지 +로 split했으니까 똑같이 +로 나눠서 계산하는거야.
- 이 경우는 +와 *연산자가 동시에 있으니까 이것도 bool값을 정해줘서 조건문으로 판별하는거지
- +와 *가 동시에 있으면 +로 나눠서 인덱스에 있는 값들을 더해서 출력하면돼!
public class Calc {
public static int run(String exp) {
boolean needToMulti = exp.contains("*");
boolean needToPlus = exp.contains("+");
boolean needToCompound = needToPlus && needToMulti;
if (needToCompound) {
String[] bits = exp.split(" \\+ ");
return Integer.parseInt(bits[0]) + run(bits[1]);
}
if (needToMulti) {
String[] bits = exp.split(" \\* ");
int sum = 1;
for (int i = 0; i < bits.length; i++) {
sum *= Integer.parseInt(bits[i]);
}
return sum;
} else {
exp = exp.replace("- ", "+ -");
String[] bits = exp.split(" \\+ ");
int sum = 0;
for (int i = 0; i < bits.length; i++) {
sum += Integer.parseInt(bits[i]);
}
return sum;
}
}
}
이렇게 이건 천천히 생각해보니까 어려운 문제는 아니었어
이번 문제는 생각보다 너무 어려웠는데 강사님이 힌트를 주신 덕분에 다행히 내가 원하는 풀이로 해결 할 수 있었어.
- 나는 처음 생각한게 *를 풀어서 설명하면 더하기 잖아? 그래서 20 + 10 + 5 + 5 +5 이렇게 할까 했는데 코드로 어떻게 짜야할지 모르겠는거야.. 그래서 다음 방법을 생각했어.
- 두번째 방법은 마찬가지로 +로 짜르는데 그럼 20, 10, 5 , 5 2 이렇게 짤리잖아?
그러면 인덱스안에 가 있는지 없는지 contain함수를 사용해서 확인하는거야!!- 그리고 값이 있으면 run메서드를 다시 수행하면 5*2만 인덱스에 있으니까곱하기 연산만 수행이 될꺼아니야! 그 값을 a에 넣고 sum에다가 더해줘
- 그리고 else로 넘어가서 차례대로 정수형으로 바꿔준다음 sum에다 넣으면 10 + 20 +10 해서 40이지?
- 마지막으로 sum을 return하면 끝!
import java.util.Arrays;
public class Calc {
public static int run(String exp) {
boolean needToMulti = exp.contains("*");
boolean needToPlus = exp.contains("+");
boolean needToCompound = needToPlus && needToMulti;
if (needToCompound) {
int a;
int b ;
int sum = 0;
String[] bits = exp.split(" \\+ ");
for(int i = 0; i< bits.length; i++){
if(bits[i].contains("*")) {
a= run(bits[i]);
System.out.println("a="+a);
sum += a;
}
else {
b=Integer.parseInt(bits[i]);
System.out.println("b="+b);
sum += b;
}
System.out.println("sum="+sum);
}
return sum;
}
if (needToMulti) {
String[] bits = exp.split(" \\* ");
int sum = 1;
for (int i = 0; i < bits.length; i++) {
sum *= Integer.parseInt(bits[i]);
}
return sum;
}
else {
exp = exp.replace("- ", "+ -");
}
String[] bits = exp.split(" \\+ ");
int sum = 0;
for (int i = 0; i < bits.length; i++) {
sum += Integer.parseInt(bits[i]);
}
return sum;
}
}