https://school.programmers.co.kr/learn/courses/30/lessons/120907
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
n차 - 무수한 노력 끝에 맛본
패배…
구글링은 절대 하지 않으리라 마음먹었으나 결국 이 친구를 이기지 못하였다.
아이디어라 해봤자, 공백을 제거해서 새로운 배열에 저장해서 사용하는 거였는데,
나는 문자열의 공백을 어떻게 제거해서 새로운 배열에 저장하는지를 몰랐다.
배열안의 문자열을 꺼내서 각각 따로 배열에 저장해주고, 나아가 이의 공백문자까지 고려해줘야 한다니 머리는 터져버렸다. 그 결과물은....노답..
이것저것 긁어와서 붙여보고 어쩌구 저쩌구 내 나름대로 고민은 했다만 결국 그마저도 실행되지 않았다.
<사고의 과정과 코드>
그럼 어떻게 이 난관을 헤쳐나갈 수 있을까?
💡 split() 을 사용해보자!
split() 사용 상세 내용은 다음 글에서 다룰 예정이다.
split()메서드에서 괄호 안에 어떤 것을 기준으로 나눌지를 넣어야 하는데,
이 문제에서는 공백을 기준으로 나눠야 하므로 split(” “)이라 해주었다.
그렇게 되면,
예를 들어 “3 + 4 = 7”이라는 문자열은
[3,+,4,=,7] 로 나뉘어져 배열에 저장될 것이다.
아무튼,
최종일 줄 알았던 코드
package programmers.OX문제.sol;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
String[] quiz = { "3 - 4 = -3", "5 + 6 = 11" };
Solution sol = new Solution();
sol.solution(quiz);
System.out.print(Arrays.toString(sol.solution(quiz)));
}
public String[] solution(String[] quiz) {
String[] answer = new String[quiz.length];
for (int i = 0; i < quiz.length; i++) {
// quiz의 각 칸에 있는 수식들을 공백 기준으로 분할하여 array라는 스트링 배열에 저장.
String[] array = quiz[i].split(" ");
int[] toIntArray = new int[array.length];
for(int j=0;j<5;j+=2) {
char op = array[j].charAt(0);
if(op=='-') {
toIntArray[j] = op_delete(array[j])*-1;
}
else {
toIntArray[j]=Integer.parseInt(array[j]);
}
}
if (array[1].equals ("-")) {
if (toIntArray[0] - toIntArray[2] == toIntArray[4])
answer[i] = "O";
else
answer[i] = "X";
} else if (array[1].equals("+")) {
if (toIntArray[0] + toIntArray[2] == toIntArray[4])
answer[i] = "O";
else
answer[i] = "X";
}
}
return answer;
}
public int op_delete(String s){
String tmp_arr="";
for(int i=1; i<s.length(); i++){
tmp_arr+=s.charAt(i);
}
return Integer.parseInt(tmp_arr);
}
}
딱봐도 복잡하다.
다 포기하고 구글의 힘에 의존하여 문제를 풀던 때라 여기저기서 긁어오고보니,
charsAt()도 사용하고, 문자열을 정수형으로 바꿔주는 함수도 따로 만들었었다.
한마디로 바 보 였다.
문자열을 정수형으로 바꾸는 방법이 떡하니 있는데, 그걸 뭐더러 굳이 함수까지 만들어가면서까지 바꿔주었을까 난…?
한가지 더,
사실 여기까지 했는데도 안돼서 거의 울뻔했다. 왜 안되었냐면, 너무나도 당연한
equals와 ==의 차이를 생각하지도 않고, 뺄셈연산인지 덧셈연산인지를 구분하기 위해
==만을 사용했기 때문이다.
안돼서 울뻔한 것 보다, 왜 안됐는지를 알았을 때 더 울뻔했다..ㅋㅋ
반성하고, 주석까지 추가하여 정말 최종으로 작성한 코드는 다음과 같다.
찐 최 종
package programmers.OX문제.sol;
import java.util.Arrays;
public class Solution2 {
public static void main(String[] args) {
String[] quiz = { "3 - 4 = -3", "5 + 6 = 11" };
Solution2 sol = new Solution2();
System.out.print(Arrays.toString(sol.solution(quiz)));
}
public String[] solution(String[] quiz) {
// 각 퀴즈에 대한 답을 저장할 answer배열 생성.
String[] answer = new String[quiz.length];
// quiz의 각 칸에 있는 수식들( 0번퀴즈, 1번퀴즈 ~~~ )
for (int i = 0; i < quiz.length; i++) {
// 공백 기준으로 분할하여 array라는 스트링 배열에 저장.
String[] array = quiz[i].split(" ");
// 스트링배열array의 각 원소들을 정수로 바꿔 저장할, 정수형배열을 생성.
int[] toIntArray = new int[array.length];
// array의 각 원소들을 정수형으로 바꿔, toIntArray의 각 인덱스에 저장.
for (int j = 0; j < array.length; j += 2) {
toIntArray[j] = Integer.parseInt(array[j]);
}
// 만약, 뺄셈 퀴즈라면
if (array[1].equals("-")) {
if (toIntArray[0] - toIntArray[2] == toIntArray[4])
answer[i] = "O";
else
answer[i] = "X";
} else if (array[1].equals("+")) { // 만약, 덧셈 퀴즈라면
if (toIntArray[0] + toIntArray[2] == toIntArray[4])
answer[i] = "O";
else
answer[i] = "X";
}
}
return answer;
}
}
이번 과제를 통해 너무나도 유용하게 쓰일 것 같은,
split()을 알았고,
얼떨결에
charsAt()도 알게 되었으며,
다시 한 번 더 equals 와 ==의 차이를 되세겼다.
그리고, 문자형을 정수형으로, 정수형을 문자형으로 바꾸는 방법을 1+1=2처럼 바로 튀어나올 수 있을때까지 단련해야겠다는 반성도 하였다.
'JAVA > 코드 과제' 카테고리의 다른 글
[JAVA] 스타트와 링크 (백준 14889번) (0) | 2023.04.01 |
---|---|
[JAVA] 유한소수 판별하기 (0) | 2023.02.22 |
[JAVA] 배열의 유사도 (0) | 2023.02.22 |
[JAVA] 자릿수 더하기 (0) | 2023.02.21 |
[JAVA] 최빈값 구하기 (0) | 2023.02.20 |