<문제 제시>
<문제설명>
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
<예시 입출력>
<문제 해결 과정>
String타입으로 주어진 배열 안의 식을 연산하는 문제이다.
먼저 인덱스 별로 "인자1 (연산자) 인자2 부등호 결과값"이 주어진다.
실제 데이터로 표현하면 "3 - 4 = - 3" 이다.
이 데이터를 토큰별로 떼어내어 저장함과 동시에 이 수식이 맞는지 아닌지의 진위여부 또한 파악해야하는 문제이다.
먼저 3 - 4 = - 3처럼 띄어쓰기 포함해서 주어진 데이터를 저장할 수 있어야했다.
String[] answer = new String[quiz.length];
for(int i = 0; i < quiz.length; i++) {
String data = quiz[i];
String[] arr = data.split(" ");
}
main함수에서 String[] array 를 통해 값을 입력받고, solution 함수에서 그 배열을 받아와 그 배열의 길이만큼의
새로운 배열(answer)을 만든다.
quiz배열의 인덱스마다 split을 진행한다. "3 - 4 = -3"이면
arr[0] = "3"
arr[1] = "-"
arr[2] = "4"
arr[3] = "="
arr[4] = "-3" 이 저장된다.
이렇게 5가지의 배열 데이터가 있고 이 데이터들은 그 위치에 맞게 기능을 한다.
arr[0] 과 arr[2]는 인자1, 2일 것이고,
arr[1]은 연산자일 것이다.
arr[4]는 최종 결과값일 것이다.
이를 활용하여 이중 for문을 통해 연산을 한다.
String타입이므로 .equals() 메서드를 통해 if문을 작성해주었다.
for(int j = 0; j < arr.length; j++) {
if(arr[1].equals("+")) {
int compare = Integer.parseInt(arr[0]) + Integer.parseInt(arr[2]);
if(compare == Integer.parseInt(arr[4])) answer[i] = "O";
else if(compare != Integer.parseInt(arr[4])) answer[i] = "X";
}
else if(arr[1].equals("-")) {
int compare = Integer.parseInt(arr[0]) - Integer.parseInt(arr[2]);
if(compare == Integer.parseInt(arr[4])) answer[i] = "O";
else if(compare != Integer.parseInt(arr[4])) answer[i] = "X";
}
}
문제에서 연산자는 +와 -만 주어진다고 했으니 조건을 두개 만들어놓는다.
arr[1]은 연산자 위치이므로 이 연산자가 "+"와 일치하는지 "-"와 일치하는지에 따라 판단해주면된다.
String타입 데이터이므로 Integer.parseInt()를 통해 정수형으로 바꿔준 후 연산해주었다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// #. OX퀴즈
public class ox_quiz {
public static String[] solution(String[] quiz) {
String[] answer = new String[quiz.length];
for(int i = 0; i < quiz.length; i++) {
String data = quiz[i];
String[] arr = data.split(" ");
for(int j = 0; j < arr.length; j++) {
if(arr[1].equals("+")) {
int compare = Integer.parseInt(arr[0]) + Integer.parseInt(arr[2]);
if(compare == Integer.parseInt(arr[4])) answer[i] = "O";
else if(compare != Integer.parseInt(arr[4])) answer[i] = "X";
}
else if(arr[1].equals("-")) {
int compare = Integer.parseInt(arr[0]) - Integer.parseInt(arr[2]);
if(compare == Integer.parseInt(arr[4])) answer[i] = "O";
else if(compare != Integer.parseInt(arr[4])) answer[i] = "X";
}
}
}
return answer;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] array = {"3 - 4 = -3", "5 + 6 = 11"};
System.out.println(Arrays.toString(solution(array)));
}
}
split이 띄어쓰기를 제외한 값들을 모두 찾아낸다는 것이 이번 알고리즘에서 핵심 해결 요소였다.
인덱스 별로 띄어내어 새로운 String타입 배열에 넣는 과정도 중요했다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120907
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '배열 뒤집기' - Java (0) | 2023.04.17 |
---|---|
[프로그래머스] '외계행성의 나이' - Java (1) | 2023.04.16 |
[프로그래머스] '다음에 올 숫자' - Java (0) | 2023.02.24 |
[프로그래머스] '최빈값 구하기' - Java (0) | 2023.02.24 |
[프로그래머스] '양꼬치' - Java (1) | 2023.02.23 |