본문 바로가기

C programming/[Code Up]

[Code Up] 1285번 : 계산기 2

728x90
반응형

난이도  ⭐️⭐️⭐️

문제 설명

 

계산기 2

왼쪽부터 차례대로 연산한 결과를 출력한다.(우선순위x)

www.codeup.kr

계산기 1에서 두 피연산자에 대한 연산만 다루었다.

이번에는 식을 입력하면 차례대로 계산하여 출력하는 계산기를 만들어보자.

단, 우선순위는 따지지 않고 왼쪽에서부터 차례대로 계산하고, 모든 계산은 정수형 계산으로 처리한다.

입력

첫째 줄에 정수와 사칙연산기호가 식으로 입력된다.(정수는 int 범위, 괄호 없이 +,-,*,/) 

식의 마지막엔 =가 입력된다.

출력

왼쪽부터 차례대로 연산한 결과를 출력한다.(우선순위 x)

[입력 예시]

3+3-3*3/3=

[출력 예시]

3

문제 풀이

[요약]

이 문제를 처음 접근할 때 생각보다 까다롭다고 느껴지는데, 이는 조건 판단 시에 모든 입력을 문자 혹은 문자열로 접근했기 때문이다!

이 문제는 연산자는 짝수번째에 입력된다는 것을 이용하면 금방 해결할 수 있다.

 

풀기에 앞서 입력예시를 보면 다음과 같다.

3+3-3*3/3=

눈치가 빠른 사람은 연산자는 모두 짝수번째에 입력됨을 알 수 있다(사람 기준). 이를 이용해 로직을 짜보자.

이때 입력의 횟수는 사람 기준을 따른다.

1. 숫자를 입력받을 정수형 변수 num, 결과를 저장할 정수형 변수 rsr 선언/초기화, 입력된 횟수를 저장할 변수(짝수/홀수 입력판단) cnt을 선언한다.

2. 연산자를 입력받고 조건을 판단할 연산자 저장 문자형 변수 cal을 선언한다.

3. 가장 먼저 입력받은 값(cnt==1)은 rst의 변수에 저장한다.

4. cnt가 증가함에 따라 짝수 번째에서 연산자를 입력받는다. 이때 주의할 점은 연산자 입력 시에는 결과를 수정할 수 없다는 것을 기억한다!
(연산자를 입력받고 다음 숫자 입력에서 연산자의 형태에 따라 값을 수정한다.) 이후 cnt값을 증가한다.

5. cnt값이 증가함에 따라 홀수 번째에서 숫자를 입력받는다. 이전에 입력받고 저장된 cal의 조건에 따라  결괏값인 rst를 수정한다.

6. 4-5의 과정을 반복한다.

7. 종료값인 = 이 입력 시에 반복을 종료하고 결괏값을 출력한다.

정답 코드

#include<stdio.h>

int main(){
    int num,rst = 0,cnt=1;
    char cal;

    while(1){
        if(cnt%2!=0){
            scanf("%d",&num); if(cnt == 1)(rst  = num);
            if(cal == '+') rst += num;
            else if(cal == '-') rst -= num;
            else if(cal == '*') rst *= num;
            else if(cal == '/') rst /= num;
            cnt ++;
        }
        else if(cnt%2==0){
            scanf("%c",&cal); if(cal == '=')break;
            // printf("rst = %d\n",rst);
            cnt++;
        }
}

참고

https://www.codeup.kr/problem.php?id=1231

 

계산기 1

영민이는 프로그램을 이용하여 계산기를 만들려고한다. 하지만 영민이는 프로그램을 얼마 배우지 않아 어려워하고있다. 우리가 영민이를 위해 계산기 프로그램을 만들어주자.

www.codeup.kr

 

728x90
반응형
댓글