[백준/JAVA] - 입출력과 사칙연산 (1-5)
👉 백준 입출력과 사칙연산 https://www.acmicpc.net/step/1
백준 단계별로 풀어보기 1단계 - 입출력과 사칙연산(1-5)입니다.
새로운 언어를 공부할 때 이걸 풀면서 시작해도 정말 좋습니다!
저는 백준으로 자바를 시작했어요
1. Hello World (2557번)

https://www.acmicpc.net/problem/2557
정말 기본적인 문제이다🐣
“Hello World!” 를 그대로 출력 해주기만 하면 된다 :)
Java
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
쉽쥬?
2. A+B (1000번)

https://www.acmicpc.net/problem/1000
정수 A와 B를 입력받아서 두 수를 더한 값을 출력하는 문제다.
입력을 받는 방법으로는 Scanner를 이용하거나,
BufferedReader와 StringTokenizer를 이용하는 방법이 있다.
먼저 Scanner로 풀어보겠다.
Java (Scanner)
//Scanner 클래스를 사용하기 위해 호출
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner 객체 생성
//입력
int A = sc.nextInt();
int B = sc.nextInt();
//출력
System.out.println(A+B);
}
}
Scanner 클래스를 사용하기 위해서는 util 패키지 내에 있는 Scanner 클래스를 호출해 주어야 한다.
Scanner는 여러 값을 입력받을 때 토큰(공백, 탭, 엔터)으로 구분하여 입력받는다.
Scanner 클래스의 nextInt() 메소드는 int형을 입력받아 리턴해준다. (nextLong, nextDouble, nextLine 등등… 다양한 메소드가 있다.)
그리고 마지막에 출력할 때 더해주기만 하면 된다!
간단하쥬?
이번에는 조금 더 빠른 방법을 써보겠습니다 🏃♂️🏃♂️🏃♂️
Java (BufferedReader + StringTokenizer)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
//클래스 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//입력
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
//출력
System.out.println(A+B);
}
}
아까보다 코드가 조금 더 복잡해졌다.
우선 클래스들을 사용하기 위해 호출을 한다. (BufferedReader, InputStreamReader, IOException, StringTokenizer)
객체를 생성하는 코드를 정말 간단하게 설명하면
System.in(byte로 입력받음) ➡ InputStreamReader(char로 변환) ➡ BufferedReader(버퍼에 저장 후 문자열로 내보내기)
StringTokenizer 메소드 : StringTokenizer(문자열, “구분자(없으면 공백이 기본값)”)
간단하게 설명하면 이렇습니다…🤔 나중에 이거 설명하는 글도 올릴게요 :)
-
변수 A,B에 넣을 때는 입력받은 값이 문자열로 나오기 때문에 parseInt를 통해서 int로 형 변환을 시켜줘야 한다 !
그리고 똑같이 더한 값을 출력하면 끝 !!

제출번호 67304224 - BufferedReader + StringTokenizer이용 (128ms)
제출번호 67283959 - Scanner 이용 (208ms)

아니 정말 빠르잖아..!!
위의 결과처럼 실제로 BufferedReader + StringTokenizer를 쓴 것이 훨씬 빠르다는 것을 알 수 있다.
지금은 속도가 크게 상관은 없지만 나중에 시간 제한이 있는 문제들도 나오기 때문에 빠른 방법도 알아두는 것이 좋다!
2-1 BufferedReader 가 왜 빠를까….?
추석 기념으로 차가 밀리는 것으로 예를 들어보자🚗🚙🚌

차들이 입력받은 문자(A,B,C,D)라고 생각하자
요금을 정산할 때 차 한대씩 정산하는 것보다, 하이패스로 한 번에 하는 것이 훨씬 빠르다.
한 대씩 정산하는 것이 Scanner이고,
하이패스가 BufferedReader라고 생각하면 이해가 쉬울 것이다.
간단히 말하면 Scanner는 출력할 때 입력받은 값을 하나씩 내보내는 반면,
BufferedReader는 입력받은 값들을 한 번에 내보낸다.
그래서 Scanner보다 BufferedReader가 훨씬 빠른 것이다 !!
나중에 다른 글로 더 자세히 다뤄보겠습니다
3. A-B (1001번)

https://www.acmicpc.net/problem/1001
위 문제에서 연산자만 -로 바꾸면 된다.
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
System.out.println(A-B);
}
}
Java (BufferedReader + StringTokenizer)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
System.out.println(A-B);
}
}

제출번호 67307209 - BufferedReader + StringTokenizer
제출번호 67307202 - Scanner
역시 BufferedReader가 빠르다
4. AxB (10998번)

https://www.acmicpc.net/problem/10998
연산자를 *(곱셈)으로 바꾸자!
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
System.out.println(A*B);
}
}
Java (BufferedReader + StringTokenizer)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
System.out.println(A*B);
}
}
5. A/B (1008번)

https://www.acmicpc.net/problem/1008
이번 문제는 연산자만 바꾼다고 해결되지 않는다 !!!
출력 값이 소수점 아래까지 나오기 때문에 변수를 저장할 때 double형으로 저장해야 한다.
이처럼 백준 문제를 풀 때는 입출력 값을 잘 봐야 한다… 안 그러면 오류 난다. (맞는데 왜 틀리지…?????)
Java (Scanner)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double A = sc.nextInt();
double B = sc.nextInt();
System.out.println(A/B);
}
}
Java (BufferedReader + StringTokenizer)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
double A = Integer.parseInt(st.nextToken());
double B = Integer.parseInt(st.nextToken());
System.out.println(A/B);
}
}
입력값이 실수가 아니기 때문에 parseInt까지 건드릴 필요는 없다.

오늘은 여기까지만 쓰도록 하겠습니다 !
다들 즐거운 추석 보내세요 ☺☺
🔥연휴에도 열심히🔥
댓글남기기