본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 1차 10번

by 우공80 2022. 10. 8.
728x90

문자열 수식 계산하기

문제 지문 #10

문자열 형태의 식을 계산하려 합니다. 식은 2개의 자연수와 1개의 연산자('+', '-', '*' 중 하나)로 이루어져 있습니다. 예를 들어 주어진 식이 "123+12"라면 이를 계산한 결과는 135입니다.

문자열로 이루어진 식을 계산하기 위해 다음과 같이 간단히 프로그램 구조를 작성했습니다.

1단계. 주어진 식에서 연산자의 위치를 찾습니다.
2단계. 연산자의 앞과 뒤에 있는 문자열을 각각 숫자로 변환합니다.
3단계. 주어진 연산자에 맞게 연산을 수행합니다.

문자열 형태의 식 expression이 매개변수로 주어질 때, 식을 계산한 결과를 return 하도록 solution 메소드를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 메소드와 매개변수를 알맞게 채워주세요.


매개변수 설명

문자열 형태의 식 expression이 solution 메소드의 매개변수로 주어집니다.

  • expression은 연산자 1개와 숫자 2개가 결합한 형태입니다.
    • 연산자는 '+', '-', '*'만 사용됩니다.
    • 숫자는 1 이상 10,000 이하의 자연수입니다.

return 값 설명

expression을 계산한 결과를 return 해주세요.

  • 계산 결과는 문자열로 변환하지 않아도 됩니다.

예시

expression return
"123+12" 135

예시 설명

'+'를 기준으로 앞의 숫자는 123이고 뒤의 숫자는 12이므로 두 숫자를 더하면 135가 됩니다.


혼자 풀이

빈칸 채우기 문제입니다. 아래와 같은 함수가 주어지고 주어진 함수를 이용해서 문자열로 된 수식을 계산해서 답을 내면 됩니다.

  • 연산자에 따라 계산 결과를 리턴하는 메서드 func_a
  • 연산자의 위치를 반환하는 메서드 func_b
  • 연산자 앞 뒤 문자열을 숫자로 변경하여 반환하는 func_c 
/*=========================================
  1차 10번  문자열형태의 이항식을 계산하기
 ==========================================*/


class Solution {
    class Pair{
        public int firstNum;
        public int secondNum;
    }
    //연산자에 따라 계산결과를 리턴하는 메서드
    public int func_a(int numA, int numB, char exp){
        if (exp == '+')
            return numA + numB;
        else if (exp == '-')
            return numA - numB;
        else
            return numA * numB;
    }
    //연산자를 찾아서 위치를 반환하는 메서드
    public int func_b(String exp){
        for(int i = 0; i < exp.length(); i++){
            char e = exp.charAt(i);
            if(e == '+' || e == '-' || e == '*')
                return i;
        }
        return -1;
    }
    //앞뒤 문자열을 숫자로 변환하는 메서드
    public Pair func_c(String exp, int idx){
        Pair ret = new Pair();
        ret.firstNum = Integer.parseInt(exp.substring(0, idx));
        ret.secondNum = Integer.parseInt(exp.substring(idx + 1));
        return ret;
    }
    
    public int solution(String expression) {
//      int expIndex = func_@@@(@@@);
//      Pair numbers = func_@@@(@@@);
//      int result = func_@@@(@@@);
    	int expIndex = func_b(expression);  //수정한 부분
        Pair numbers = func_c(expression,expIndex);  //수정한 부분
        int result = func_a(numbers.firstNum,numbers.secondNum,expression.charAt(expIndex)); //수정한 부분
        return result;
    }

    // The following is main method to output testcase.
    public static void main(String[] args) {
        Solution sol = new Solution();
        String expression = "123+12";
        int ret = sol.solution(expression);

        // Press Run button to receive output. 
        System.out.println("Solution: return value of the method is " + ret + " .");
    }
}

정답과 동일합니다.

# 첨부 파일

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

FirstQuestion10.zip
0.01MB

출처: https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp

728x90

댓글