Coding Test/Java Coding Test
[프로그래머스 / 자바] - OX퀴즈
nam_ji
2024. 9. 28. 13:22
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;
}
}