OX 퀴즈

nacSeo (낙서)·2024년 4월 22일
0

프로그래머스

목록 보기
150/169

문제 설명

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
1 ≤ quiz의 길이 ≤ 10
X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
-10,000 ≤ X, Y ≤ 10,000
-20,000 ≤ Z ≤ 20,000
[연산자]는 + 와 - 중 하나입니다.

나의 코드

  • 첫 번째 코드
class Solution {
    public String[] solution(String[] quiz) {
        String[] answer = new String[quiz.length];
        for(int i=0; i<quiz.length; i++) {
            String[] strArr = quiz[i].split(" ");
            int[] intArr = new int[3];
            int temp = 0;
            for(int j=0; j<intArr.length; j+=2) {
                intArr[temp] = Integer.parseInt(strArr[j]);
                temp++;
            }
            if(strArr[1].equals("+")) {
                if(intArr[0] + intArr[1] == intArr[2]) {
                    answer[i] = "O";
                } else answer[i] = "X";
            } else if(strArr[1].equals("-")) {
                if(intArr[0] - intArr[1] == intArr[2]) {
                    answer[i] = "O";
                } else answer[i] = "X";
            }
        }
        return answer;
    }
}

split()함수를 사용하여 공백을 기준으로 나눠주고, 숫자는 정수 배열에 저장하여 각 상황별로 식을 구해줬는데 실패..

  • 최종 코드
class Solution {
    public String[] solution(String[] quiz) {
        String[] answer = new String[quiz.length];
        for(int i=0; i<quiz.length; i++) {
            String[] arr = quiz[i].split(" ");
            int num1 = Integer.parseInt(arr[0]);
            String operator = arr[1];
            int num2 = Integer.parseInt(arr[2]);
            int result = Integer.parseInt(arr[4]);
            
            if(operator.equals("+")) {
                if(num1 + num2 == result) {
                    answer[i] = "O";
                } else answer[i] = "X";
            } else if(operator.equals("-")) {
                if(num1 - num2 == result) {
                    answer[i] = "O";
                } else answer[i] = "X";
            }
        }
        return answer;
    }
}

생각해보니 굳이 정수 배열로 숫자만 담을 필요가 없었다. split()함수를 통해 공백을 기준으로 잘라주면 어차피 각 배열의 요소가 숫자인지 연산자인지 알고 있기 때문에 바로 정의해줘서 해결!

다른 사람 코드

class Solution {
    public String[] solution(String[] quiz) {
        for(int i=0; i<quiz.length; i++){
            String[] text = quiz[i].split(" ");
            int result = Integer.parseInt(text[0]) + ( Integer.parseInt(text[2]) * ( text[1].equals("+") ? 1:-1) );
            quiz[i] = result == Integer.parseInt(text[4])? "O": "X";
        }
        return quiz;
    }
}

삼항연산자 사용

import java.util.Arrays;

class Solution {
    public String[] solution(String[] quiz) {
        return Arrays.stream(quiz).map(s -> {
            String[] arr = s.trim().split(" ");
            return arr[1].equals("+") && Integer.parseInt(arr[0]) + Integer.parseInt(arr[2]) == Integer.parseInt(arr[4]) || Integer.parseInt(arr[0]) - Integer.parseInt(arr[2]) == Integer.parseInt(arr[4]) ? "O" : "X";
        }).toArray(String[]::new);
    }
}

Stream 사용

느낀 점

제한사항에서 힌트를 얻어 공백을 기준으로 나눠 해결하는 아이디어는 떠올렸지만, 처음에 너무 어렵게 생각하여 골머리를 조금 앓았다 😅 그래도 계속 도전하며 스스로 해결 코드를 찾아 뿌듯하고 얻어가는 게 있던 문제 :)

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글