-
728x90
문제 설명
덧셈, 뺄셈 수식들이 '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<answer.length; i++) { String[] que = quiz[i].split(" "); if(que[1].equals("-")) { if(Integer.parseInt(que[0])-Integer.parseInt(que[2])==Integer.parseInt(que[4])) { answer[i]="O"; }else { answer[i]="X"; } }else { if(Integer.parseInt(que[0])+Integer.parseInt(que[2])==Integer.parseInt(que[4])) { answer[i]="O"; }else { answer[i]="X"; } } } return answer; } }
먼저 quiz 배열의 길이만큼 answer 배열을 초기화 해준다.
그리고 answer 배열의 길이만큼 for문을 돌면서 quiz 배열 원소를 공백(" ") 기준으로 잘라준다.
자른 quiz 원소 que의 수식을 비교하여 '-'면 마이너스 연산을 통해 결과값을 비교하고,
'-'가 아니라면 그 역시 플러스 연산을 통해 결과값을 비교하여 맞으면 O, 아니면X를 answer 배열에 넣어 리턴한다.
사실 로직은 비슷하지만 수식을 구분해야 하기 때문에 아쉽지만 똑같은 로직을 중복되게 썼는데 다른 사람 풀이를 보니 완전 천재 만재 선생님들은 세상에 많다.
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; } }
for문과 quiz 원소를 공백(" ") 기준으로 자르는 것은 동일하지만
아싸리 result 변수에 계산 결과를 담는다. 이 때 맨 마지막에 곱하기 부분에서는 수식 구분을 하기 위한 것인데
삼항연산자를 이용해서 수식이 "+"와 동일하다면 1, 아니라면 -1을 곱해서 수식이 +인지 -인지 구분한다.
그리고 result와 quiz의 답이 일치하면 O, 아니면 X를 배열에 담아 리턴한다.
728x90'algorithm' 카테고리의 다른 글
자바 알고리즘 - n의 배수 고르기 (0) 2023.08.31 자바 알고리즘 - 자릿수 더하기 (0) 2023.08.31 자바 알고리즘 - 문자열 안에 문자열 (0) 2023.08.30 자바 알고리즘 - 제곱수 판별하기 (0) 2023.08.30 자바 알고리즘 - 세균 증식 (0) 2023.08.30