본문 바로가기
문제풀기/구름톤 챌린지

구름톤 챌린지 1주 Day3 - 합 계산기

by project100 2023. 8. 18.

합 계산기 (Java)

 

제출한 답 :

package week1;

import java.io.*;
class day3 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(br.readLine());

        int total = 0;

        for (int i = 0; i < t; i++) {
            String cal = br.readLine();
            String[] value = cal.split(" ");

            int m = Integer.parseInt(value[0]);
            char four = value[1].charAt(0);
            int n = Integer.parseInt(value[2]);

            int result = 0;

            switch (four) {
                case '+':
                    result = m + n;
                    break;
                case '-':
                    result = m - n;
                    break;
                case '*':
                    result = m * n;
                    break;
                case '/':
                    result = m / n;
                    break;
            }

            total += result;
        }
        System.out.println(total);
    }
}

 
다사다난했던 문제였죠... 코드를 다 썼는데 한 번 날려서ㅎㅎㅎ
코딩도 코딩인데 컴퓨터 공부를 다시 해야 할 판? 
 
switch문을 사용하여 계산식을 만들어서 구현했는데 이 부분이 어려운 게 아니라 정말 기초적인 부분인
char로 연산기호를 받고  charAt(0) 쓰는 걸 까먹어서 좋은 자료를 찾아왔습니다.
진짜 쉽게 자세하게 설명해 주신 듯 ㅎㅎ

[자바 프로그래밍 기초] 4. charAt()에 대해서 알아보자.

이번에 알아볼 charAt()이라는 녀석은 이전에 Scanner에 대해서 알아볼 적에 잠시 등장했던 녀석이다. 오늘은 이 녀석이 도대체 뭐하는 녀석이며 어떻게 사용하는지에 대해서 알아보려고 한다. 1. cha

colossus-java-practice.tistory.com

문제 풀이를 보니 String으로 간단하게 받기도 하네요. 둘 중 아무거나 편한 걸로 쓰면 될 거 같네요.
 
항상 입력을 받을 때는 출력할 부분을 저장할 변수도 빼놓지 않고 생각하는 습관을 들여야 할 것 같아요.
 
저는 연산 부분의 합을 result를 따로 받아서 total에 더해 주었는데 문제 풀이는 result 하나를 사용하고,
if문으로 equals()로 문자열을 비교해서 연산 부분을 구현했네요. 
가뜩이나 복잡해 보이는 코드, 깔끔하게 구현하려면 switch문이 낫지 않을까 생각합니다. 
 
티스토리 코딩 넣기 편하라고 이용하는 건데.. 이렇게 줄 지맘대로 바꾸고 못 맞춰주면 정말 별론데..;;
 

문제 풀이

필요한 개념
  • 문자열
분석

이 문제는 주어진 문자열 형태의 계산식을 평가하여 결과를 출력하는 것이 목표입니다. 계산식의 부호와 수를 분리해서 연산을 수행하고, 그 결과를 모두 더하면 됩니다.

문제 풀이

주어지는 문자열 형태의 계산식을 정수 부분과 부호 부분으로 나누면 됩니다. 그리고 부호에 따라서 알맞은 연산을 하고 그 결과를 모두 더하면 됩니다.

  • 문자열을 나눌 때 사용하는 split()는 항상 배열을 반환해요.
  • 문자열을 정수로 변환할 때는 Integer.parseInt()을 사용해요.
문자열 분리하기

문자열을 분리할 때는 보통 split()을 사용합니다. split('분리 기준') 같은 방법으로 작성하면 쉽게 분리할 수 있습니다.
 

  String[] s = sc.nextLine().split(" ");
  int firstNum = Integer.parseInt(s[0]);
  String command = s[1];
  int secondNum = Integer.parseInt(s[2]);

그러면 간단하게 정수 부분과, 부호 부분을 나눌 수 있습니다.
 
 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  // 입력을 받기 위해 Scanner 객체 생성

        // 테스트 케이스의 수 T 입력 받기
        int T = Integer.parseInt(sc.nextLine());
        int result = 0;

        // 각각의 수식 처리하기
        for (int i = 0; i < T; i++) {
            String[] strArr = sc.nextLine().split(" ");
            int firstNum = Integer.parseInt(strArr[0]);
            String command = strArr[1];
            int secondNum = Integer.parseInt(strArr[2]);
        }

        // 결과 출력
        System.out.println(result);
    }
}

 

연산 부분 구현하기

이제는 더하기, 빼기, 곱하기, 나누기의 결과를 구하면 됩니다. 문자열을 비교할 때는 equals() 메서드를 사용해야 합니다. == 연산자는 객체 참조를 비교하는데, 이는 문자열의 내용을 비교하지 않습니다.
 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = Integer.parseInt(sc.nextLine());
        int result = 0;
        for (int i = 0; i < T; i++) {
            String[] strArr = sc.nextLine().split(" ");
            int firstNum = Integer.parseInt(strArr[0]);
            String command = strArr[1];
            int secondNum = Integer.parseInt(strArr[2]);
				if (command.equals("+")) result += (firstNum + secondNum);
				else if (command.equals("-")) result += (firstNum - secondNum);
				else if (command.equals("*")) result += (firstNum * secondNum);
				else result += (firstNum / secondNum);
        }

        System.out.println(result);
    }
}