본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - OX퀴즈

by nam_ji 2024. 9. 28.

OX퀴즈 - LV.0

문제

  • 문자열 배열 quiz가 매개변수로 주어집니다.
  • quiz에는 덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있습니다.
  • 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 출력하는 문제입니다.


테스트 (인텔리제이)

  • quiz는 문자열 배열이기 때문에 정수와 +, -, = 기호와 분리하고
  • 연산 기호를 비교하여 풀면 되겠다 생각했습니다.
  • 그래서 quiz의 원소를 하나씩 꺼내서 비교할 수 있도록 for문을 사용하고
  • 그 원소를 split 메서드를 이용하여 공백 기준으로 문자열을 분리합니다.
  • 분리된 문자열은 Integer 클래스의 parseInt 메서드를 이용하여 숫자로 된 문자열을 정수로 변환해줍니다.
  • 여기서 숫자의 위치를 알 수 있는 방법은 quiz 원소의 형태가 정수,공백,연산기호,공백,정수,공백,연산기호,공백,정수 이러한 형태이기 때문에 split을 나눠진 문자열에서 인덱스 0, 2, 4번이 정수임을 알 수 있습니다.
  • 이렇게 정수로 변환된 문자열은 first 변수에 인덱스 0번 원소를 second 변수에 인덱스 2번 원소, third 변수에는 4번 원소를 저장해줍니다.
  • 이제 if문을 이용하여 quiz의 원소가 성립하는 수식인지 확인하려고 합니다.
  • if문의 조건으로 contains 메서드를 이용하여 quiz의 원소가 공백+공백 이면 first + second == thrid가 일치하는지 또는 quiz의 원소가 공백-공백이면 first - second == third가 일치하는지를 확인합니다.
    (contains로 찾는 문자에서 공백연산기호공백인 이유는 정수부분이 음수일 수 있기 때문입니다.)
  • true이면 answer 배열에 문자열 O를 false이면 answer 배열에 문자열 X를 넣어주면 해결할 수 있습니다.
package com.example.codingtest;

import java.util.Arrays;

public class OX퀴즈 {
    public static void main(String[] args) {
        /*
        문자열 배열 quiz가 매개변수로 주어집니다.
        quiz에는 덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있습니다.
        수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은
        배열을 출력하는 문제입니다.

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

        입출력 예
        quiz	                                                    result
        ["3 - 4 = -3", "5 + 6 = 11"]	                            ["X", "O"]
        ["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"]	["O", "O", "X", "O"]

        입출력 예 설명
        #1
        3 - 4 = -3 은 틀린 수식이므로 "X",
        5 + 6 = 11 은 옳은 수식이므로 "O" 입니다.
        따라서 ["X", "O"]를 return합니다.
        #2
        19 - 6 = 13 은 옳은 수식이므로 "O",
        5 + 66 = 71 은 옳은 수식이므로 "O",
        5 - 15 = 63 은 틀린 수식이므로 "X",
        3 - 1 = 2는 옳은 수식이므로 "O"
        따라서 ["O", "O", "X", "O"]를 return합니다.
         */
        String[] quiz = {"19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"};
        String[] answer = new String[quiz.length];

        for (int i = 0; i < quiz.length; i++) {
            String[] str = quiz[i].split(" ");
            int first = Integer.parseInt(str[0]);
            int second = Integer.parseInt(str[2]);
            int third = Integer.parseInt(str[4]);
            if ((quiz[i].contains(" + ") && first + second == third) ||
                    (quiz[i].contains(" - ") && first - second == third)) {
                answer[i] = "O";
            } else {
                answer[i] = "X";
            }
        }
        System.out.println(Arrays.toString(answer));
    }
}

프로그래머스 코드

 class Solution {
     public String[] solution(String[] quiz) {
         String[] answer = new String[quiz.length];
        
         for (int i = 0; i < quiz.length; i++) {
             String[] str = quiz[i].split(" ");
             int first = Integer.parseInt(str[0]);
             int second = Integer.parseInt(str[2]);
             int third = Integer.parseInt(str[4]);
             if ((quiz[i].contains(" + ") && first + second == third) ||
                     (quiz[i].contains(" - ") && first - second == third)) {
                 answer[i] = "O";
             } else {
                 answer[i] = "X";
             }
         }
        
         return answer;
    }
}