새소식

Programmers Coding Test/Java

[프로그래머스 120907] Java - 코딩테스트 입문 / OX퀴즈

  • -

 

 

OX퀴즈

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120907

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 
문자열 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)  예시

 

 

Result Table
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일 경우의 제한사항을 만들어주고 싶었으나, 코드가 너무 길어져서 지웠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.