티스토리 뷰

Solved.ac Class 완전정복 프로젝트

Class : 1 ~ 1 ++

 

 


링크

https://www.acmicpc.net/problem/10869

 

10869번: 사칙연산

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

www.acmicpc.net

문제

두 자연수 A B가 주어진다. 이때, A+B, A-B, A*B, A/B(), A% B(나머지)를 출력하는 프로그램을 작성하시오.

입력
두 자연수 A B가 주어진다. (1 ≤ A, B ≤ 10,000)

출력
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%BA% B를 출력한다.

접근방법

입력받은 데이터를 요구사항에 맞춰 여러 가지로 출력할 수 있는지 묻는 문제이다.

이 문제를 풀고 나서, 생각보다 시간이 오래걸려 BufferedReader와 Scanner를 사용하며 사용 속도를 비교하였다.

자료는 Stranger's LAB 블로거님의 포스팅을 참고하여 만들었다. BufferedReader 뿐 아니라 write도 활용한 자료가 있으니, 성능을 확실히 체감할 수 있는 좋은 포스팅이라 공유한다.

 

https://st-lab.tistory.com/18 

 

[백준] 10869번 : 사칙연산 - JAVA [자바]

https://www.acmicpc.net/problem/10869 10869번: 사칙연산 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 매우 간단한 문제..

st-lab.tistory.com

 

1. BufferedReader를 사용한 경우

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {

        Main test = new Main();
    }

    public Main() throws IOException {
        //입력
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String[] num = br.readLine().split(" ");
	//연산 결과들 저장
        int[] answer = solution(Integer.parseInt(num[0]),Integer.parseInt(num[1]));
		
        //결과를 Builder 합한다
        for (int ans : answer){
            sb.append(ans+"\n");
        }
	//한번에 출력
        System.out.println(sb);
    }

    public int[] solution(int num1,int num2){
        int[] answer = new int[5];

        answer[0]= num1 + num2;
        answer[1]= num1 - num2;
        answer[2]= num1 * num2;
        answer[3]= (int)(num1 / num2);
        answer[4]= num1 % num2;

        return answer;
    }

}

 

2. Scanner를 사용한 경우

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {


        Main test = new Main();
    }

    public Main(){
		//입력
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
		//연산결과 저장
        int[] answer = solution(num1,num2);
 		//sout 한번에 출력
        for (int result : answer){
            System.out.println(result);
        }
    }

    public int[] solution(int num1,int num2){
        int[] answer = new int[5];

        answer[0]= num1 + num2;
        answer[1]= num1 - num2;
        answer[2]= num1 * num2;
        answer[3]= (int)(num1 / num2);
        answer[4]= num1 % num2;

        return answer;
    }

}

 

 

결과

속도차이

32267078 : Stranger's Lab 님의 코드

32269999 : Main으로 모든 코드 통합

32266843 : BufferedReader + Stringbuilder

32266179 : Scanner  

 

이렇게 작은 데이터도 차이가 나는데.. 아마 입력및 출력이 길수록 이 차이는 더 클 것이라 생각된다.

기본 문제에서 이런 디테일을 연습하면, 더 효율적으로 코딩을 할 수 있을 것 같다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함