새소식

Programmers Coding Test/Java

[프로그래머스 120902] Java - 코딩테스트 입문 / 문자열 계산하기

  • -

 

 

문자열 계산하기

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

1)  문제

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 
문자열 my_string이 매개변수로 주어질 때, 
수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
제한사항
연산자는 +, -만 존재합니다.
문자열의 시작과 끝에는 공백이 없습니다.
0으로 시작하는 숫자는 주어지지 않습니다.
잘못된 수식은 주어지지 않습니다.
5 ≤ my_string의 길이 ≤ 100
my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
my_string에는 연산자가 적어도 하나 포함되어 있습니다.
return type 은 정수형입니다.
my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.

 

 

 

2)  예시

 

 

Result Table
my_string result
"3 + 4" 7

 

 

 

입출력 예 #1
3 + 4 = 7을 return 합니다.

 

 

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 문자열 my_string을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int로 합니다.

●  public int solution(String my_string) {

 

 

 

3. 우선 my_string 문자열을 공백마다 나누어서 문자배열 token로 생성합니다.

그리고 최종적으로 계산될 값 result값을 생성합니다.

초기값은 token 문자배열의 0번째 원소값 (가장 맨 앞의 숫자)로 합니다.

(문자열 형태의 숫자이므로 정수로 변환해줍니다.)

●      String[] tokens = my_string.split(" ");
        int result = Integer.parseInt(tokens[0]);

        

 

 

 

4. 우선 tokens배열의 홀수번째 원소는 연산자(operator)입니다.

이때 연산자 문자만 가져오려면 tokens의 홀수번째 원소를 가져오되, 문자로 가져와야하니(charAt(0))을 사용해줍니다. 문자열원소에서 하나의 문자만 가져오기위해 charAt메소드를 사용하였고,

어차피 1개의 문자밖에 없으니 0번째 인덱스 값을 가져오는 것입니다.

그리고 피연산자(operand)는 연산자 뒤에 나오는 값이니 tokens[i+1]번째원소이고 문자열 형태의 값이므로 정수변환해줍니다.

●  for (int i = 1; i < tokens.length; i += 2) {
            char operator = tokens[i].charAt(0);
            int operand = Integer.parseInt(tokens[i + 1]);

 

 

 

 

5. 만약 연산자가 +라면 result에 피연산자를 더하고, -라면 빼줍니다.

최종적으로 result를 반환합니다.

●     if (operator == '+') {
                result += operand;
            } else if (operator == '-') {
                result -= operand;
            }
        }
        return result;
    }
}

 

 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(String my_string) {

        String[] tokens = my_string.split(" ");

        int result = Integer.parseInt(tokens[0]);

        for (int i = 1; i < tokens.length; i += 2) {
            char operator = tokens[i].charAt(0);
            int operand = Integer.parseInt(tokens[i + 1]);

            if (operator == '+') {
                result += operand;
            } else if (operator == '-') {
                result -= operand;
            }
        }

        return result;
    }
}

 

 

 

 

 

 

 

5)  느낀점

            char operator = tokens[i].charAt(0);
            int operand = Integer.parseInt(tokens[i + 1]);

이 두줄, 문자배열에서 i번째를 원소를 가져와서 '문자'라고 착각하여 따로 형변환을 안해주었는데 자꾸 형태가 동일하지 않다는 오류 메시지를 받았습니다.

여기서 해답을 찾지 못하고 헤매다가, tokens[i]도 문자열이다 라는 것을 깨닫고 해결할 수 있었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

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

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