[프로그래머스 120907] Java - 코딩테스트 입문 / OX퀴즈
- -
OX퀴즈
https://school.programmers.co.kr/learn/courses/30/lessons/120907
1) 문제
문자열 my_string이 매개변수로 주어질 때,
수식을 계산한 값을 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
[연산자]는 + 와 - 중 하나입니다.
2) 예시
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합니다.
3) 풀이
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 문자배열 quiz를 매개변수로 하는 solution 메소드를 선언합니다.
solution은 문자배열을 반환하므로 데이터타입을 String[]로 합니다.
● public String[] solution(String[] quiz) {
3. ArrayList 클래스를 이용하여 String 형태의 값이 들어가는 List 객체 answer를 생성합니다.
● List<String> answer = new ArrayList<>();
4. quiz 배열을 순회하면서 문자열 equation(방정식)에 저장합니다.
그리고 equation을 " " 공백 한칸으로 분할하여 elements 문배열에 저장합니다.
X는 element의 첫번째 요소, Y는 3번째, Z는 5번째 요소로 구분되고,
연산자는 두번째 요소입니다.
(이때 연산자가 한글자가 아닌 것을 방지하기 위해 charAt(0)을 사용하였는데 그냥 없애도 됩니다.)
● for (String equation : quiz) {
String[] elements = equation.split(" ");
int X = Integer.parseInt(elements[0]);
char operator = elements[1].charAt(0);
int Y = Integer.parseInt(elements[2]);
int Z = Integer.parseInt(elements[4]);
for (int i = 0; i < quiz.length; i++) {
String equation = quiz[i];
String[] elements = equation.split(" ");
int X = Integer.parseInt(elements[0]);
char operator = elements[1].charAt(0);
int Y = Integer.parseInt(elements[2]);
int Z = Integer.parseInt(elements[4]);
}
-> 위 향상된 for문을 일반 for문으로 변경한 것
5. X와 Y와 Z가 제한범위 내에 있지 않다면 "X"를 answer에 추가하도록 합니다.
● if (!(X >= -10000 && X <= 10000 && Y >= -10000 && Y <= 10000 && Z >= -20000 && Z <= 20000)) {
answer.add("X");
continue;
}
6. 만약 연산자가 +라면 X+Y ==Z 일때 answer에 O를 / 아니라면 X를,
만약 연산자가 -라면 X-Y ==Z 일때 answer에 O를 / 아니라면 X를 추가해줍니다.
● if (operator == '+') {
if (X + Y == Z) {
answer.add("O");
} else {
answer.add("X");
}
} else if (operator == '-') {
if (X - Y == Z) {
answer.add("O");
} else {
answer.add("X");
}
}
}
7. answer는 List이므로 배열로 변환하여 반환해줍니다.
여기서 newString[0]을 해준 이유는 베열의 크기를 0으로 만든 것이 아니라
만약 배열의 크기가 0이라고 지정하면, toArray() 메서드는 자동으로 리스트의 크기에 맞는 새로운 배열을 생성합니다.
즉, '이 리스트의 크기만큼의 배열이 필요하다' 는 것을 알려주기 위함입니다.
● return answer.toArray(new String[0]);
}
}
4) 코드
import java.util.*;
class Solution {
public String[] solution(String[] quiz) {
List<String> answer = new ArrayList<>();
for (String equation : quiz) {
String[] elements = equation.split(" ");
int X = Integer.parseInt(elements[0]);
char operator = elements[1].charAt(0);
int Y = Integer.parseInt(elements[2]);
int Z = Integer.parseInt(elements[4]);
if (!(X >= -10000 && X <= 10000 && Y >= -10000 && Y <= 10000 && Z >= -20000 && Z <= 20000)) {
answer.add("X");
continue;
}
if (operator == '+') {
if (X + Y == Z) {
answer.add("O");
} else {
answer.add("X");
}
} else if (operator == '-') {
if (X - Y == Z) {
answer.add("O");
} else {
answer.add("X");
}
}
}
return answer.toArray(new String[0]);
}
}
5) 느낀점
Z를 공백으로 나누었을 때 5번째 요소인 것을 생각하지 못하고 계속 3번째 요소로 한 실수가 있었습니다.
0일 경우의 제한사항을 만들어주고 싶었으나, 코드가 너무 길어져서 지웠습니다.
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120862] Java - 코딩테스트 입문 / 최댓값 만들기 (2) (1) | 2024.04.28 |
---|---|
[프로그래머스 120911] Java - 코딩테스트 입문 / 문자열 정렬하기 (2) (0) | 2024.04.28 |
[프로그래머스 120902] Java - 코딩테스트 입문 / 문자열 계산하기 (0) | 2024.03.06 |
[프로그래머스 120897] Java - 코딩테스트 입문 / 약수 구하기 (0) | 2024.03.06 |
[프로그래머스 120896] Java - 코딩테스트 입문 / 한 번만 등장한 문자 (0) | 2024.03.06 |
소중한 공감 감사합니다