baekjoon 1단계 입출력과 사칙연산
baekjoon 단계별 풀이 블로그에 기록용입니다. 언어 : Java
2557번
1
2
3
4
5
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
- 💡 백준은 클래스명을 Main으로 해야 됨.
1000번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//byte 타입으로 읽어들이는 in을 char 타입으로 처리한 뒤 string(문자열)로 저장함.
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//한 줄을 입력 받는데 공백을 기준으로 나눔
int A = Integer.parseInt(st.nextToken());
// string -> int로 형변환하여 변수 A 저장
int B = Integer.parseInt(st.nextToken());
// string -> int로 형변환하여 변수 B 저장
System.out.println(A+B);//변수 A와 B의 합 출력
}
}
- ❓ 스트림이란?
출처 : Stranger’s LAB, JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader] (tistory.com)
출발지와 도착지를 이어주는 빨대로 생각, 한 곳에서 다른 곳으로의 데이터 흐름을 스트림이라고 함.
Java에서 기본이 되는 입력 스트림은 InputStream
System.in 은 InpustStram 타입의 필드 -> System 클래스의 in 이라는 필드는 InputStream의 정적 필드
우리가 키보드로 입력을 넣어주는 것들은 Sysyem.in을 통해 연결됨.
하지만 InputStream 타입의 변수를 생성하고 입력을 받는 메소드인 read()를 통해 입력하면 우리가 입력한 값과 다른 값이 나옴.
그 이유는 컴퓨터의 모든 데이터는 바이트 단위 데이터로 구성되어 있고, InputStream은 바이트 단위로 데이터를 보내며 입력 메소드인 read()는 1바이트 단위로 읽어 들임.
바이트 단위로 데이터를 입력 받으면 입력 받은 문자가 2byte 이상으로 구성되어 있는 인코딩을 사용하면 1byte 값만 읽어들이고 나머지는 읽지 않고 스트림에만 남아있게 되므로 해당 데이터의 1 Byte 에 대한 인코딩 값을 10진수로 변환한 값이 출력되는 것.
InputStream은 우리가 InputStream.read()를 통해 입력 받으려 해도 1Byte만 인식하고 한글을 입력해도 오류가 나옴. 이를 해결하기 위해 문자를 온전히 읽어들이고 확장시킨 것이 InputStreamReader임
InputStream의 바이트 단위로 읽어 들이는 형식을
문자 단위인 character인 데이터
로 변환시키는 중개자 역할임.
InputStramReader는 문자스트림
- 결과적으로 System.in은 바이트스트림인 InputStream 타입이고 이입력 방법으로는 문자를 완전히 받기 힘들기 때문에 InputStramReader로 하여 바이트 단위 데이터를 문자 단위로 처리할 수 있도록 하는 것
1
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
- 해당 코드를 풀면 다음과 같이 나옴.
1 2 3
InputStream inputStream = System.in; InputStreamReader is = new InputStreamReader(inputStream); BufferedReader bf = new BufferedReader(is);
- 기본적으로 바이트 스트림인 InputStream을 통해 바이트 단위로 데이터를 입력 받음.
입력 데이터를 char 형태로 처리하기 위해 중개자 역할인 문자스트림 InputStreamReader를 사용.
❓ BufferedReader가 필요한 이유는?
- InputStreamReader는 ‘문자’를 처리(‘문자열’이 아님)
- 문자열을 입력하고 싶다면 배열을 선언해야되어 복잡해짐.
- Buffer를 통해 입력받은 문자를 쌓아둔 뒤 한번에 문자열처럼 보내버리는 것.
- BufferReader 를 사용할 때 입력 메소드로 readLine()을 많이 사용, 이 메소드는 한 줄 전체를 읽기 때문에 char 배열을 하나하나 생성할 필요 없이 String으로 리턴하여 바로 받을 수 있음.
1
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
📌 byte 타입으로 읽어들이는 in을 char 타입으로 처리한 뒤 String(문자열)로 저장할 수 있게 함.
readLine()은 한 행을 전부 읽기 때문에 공백 단위로 입력해 준 문자열을 공백 단위로 분리해 주어야 함.
문자열 분리 방법으로 StringTokenizer 클래스를 사용,
StringTokenizer("문자열", 구분자);
로 객체를 생성하고 구분된 변수를 꺼낼 때는 차례대로nextToken();
을 해주면 문자열을 반환. ❗ 여기서 반환시킨 문자열은 반함됨과 동시에 해당 객체에서 사라짐.해당 내용은 JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader] (tistory.com) 사이트를 통해 참고.
1001번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력인 바이트 타입을 char 타입으로 처리한 뒤, string 타입으로 변환하여 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine()을 통해 한줄을 입력 받고 공백으로 구분
int A = Integer.parseInt(st.nextToken());//첫번째 토큰 string -> int 형변환하여 저장
int B = Integer.parseInt(st.nextToken()); //두번째 토큰 string -> int 형변환하여 저장
System.out.println(A-B); //두 변수의 뺄셈 출력
}
}
10998번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException
{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력인 바이트 스트림을 char 타입으로 처리한 후, String 타입으로 변환 후 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine을 통해 한줄로 입력 받고 공백으로 나눔
int A = Integer.parseInt(st.nextToken()); //첫번째 토큰을 string-> int 형변환 후 저장
int B = Integer.parseInt(st.nextToken()); //두번째 토큰을 string-> int 형변환 후 저장
System.out.println(A*B); //두 변수의 곱셈 출력
}
}
1008번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력인 바이트 스트림을 char 타입으로 처리한 후, String 타입으로 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine()을 통해 토큰을 공백으로 입력 받음
double A = Double.parseDouble(st.nextToken()); //첫번째 토큰 string->double 형변환 후 저장
double B = Double.parseDouble(st.nextToken()); //두번째 토큰 string->double 형변환 후 저장
System.out.println(A/B); //두 변수 뺄셈
}
}
10869번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력인 바이트 스트림을 char 타입으로 처리 후, string 타입으로 변환하여 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine()을 통해 한 줄을 입력 받고 공백으로 토큰 나눔
int A = Integer.parseInt(st.nextToken()); //첫번째 토큰 string->int 형변환 후 저장
int B = Integer.parseInt(st.nextToken()); //두번째 토큰 string -> int 형변환 후 저장
System.out.println(A+B); //두 변수 덧셈 출력
System.out.println(A-B); //두 변수 뺄셈 출력
System.out.println(A*B); //두 변수 곱셈 출력
System.out.println(A/B); //두 변수 나눗셈 출력
System.out.println(A%B); //두 변수 나머지 출력
}
}
10926번
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력인 바이트 스트림을 char 타입으로 처리 후, string으로 변환하여 저장
String st = bf.readLine(); //한 줄을 입력 받음
System.out.println(st+"??!"); //문자열 출력
}
}
18108번
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력 바이트 스트림을 char 타입으로 처리 후, string 타입으로 변환하여 저장
int y = Integer.parseInt(bf.readLine()); //한 줄 입력 받음 (string->int형변환)
System.out.println(y-543); //서기 연도 출력
}
}
10430번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력 바이트 스트림을 char 타입으로 처리 후, string으로 변환하여 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine()으로 한 줄 입력 받고 공백으로 토큰 구분
int A = Integer.parseInt(st.nextToken()); //첫번째 토큰 형변환(string->int) 후 저장
int B = Integer.parseInt(st.nextToken()); //두번째 토큰 형변환(string->int) 후 저장
int C = Integer.parseInt(st.nextToken()); //세번째 토큰 형변환(string->int) 후 저장
System.out.println((A+B)%C);
System.out.println(((A%C)+(B%C))%C);
System.out.println((A*B)%C);
System.out.println(((A%C)*(B%C))%C);
}
}
2588번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력 바이트 스트림을 char 타입으로 처리 후, string 타입으로 변환 후 저장
int A = Integer.parseInt(bf.readLine()); //한 줄 입력 받고 형변환(string -> int)
int B = Integer.parseInt(bf.readLine()); //한 줄 입력 받고 형변환(string -> int)
System.out.println(A*(B%10)); //A*(2)의 3번째 자리수
System.out.println(A*((B%100)/10)); //A*(2)의 2번째 자리수
System.out.println(A*(B/100)); //A*(2)의 1번째 자리수
System.out.println(A*B); //A와 B의 곱셈
}
}
11382번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.awt.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//키보드 입력 바이트 스트림을 char 타입으로 처리 후, string 타입으로 변환 후 저장
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//readLine()으로 한 줄을 입력 받고 토큰을 공백을 기준으로 구분
long A = Long.parseLong(st.nextToken()); //첫번째 토큰 형변환(string -> long) 후 저장
long B = Long.parseLong(st.nextToken()); //두번째 토큰 형변환(string -> long) 후 저장
long C = Long.parseLong(st.nextToken()); //세번째 토큰 형변환(string -> long) 후 저장
System.out.println(A+B+C); // 세 변수 덧셈
}
}
- 💡 int 범위 : -2,147,483,648
10701번
1
2
3
4
5
6
7
8
public class Main {
public static void main(String[] args) {
System.out.println("\\ /\\");
System.out.println(" ) ( ')");
System.out.println("( / )");
System.out.println(" \\(__)|");
}
}
10702번
1
2
3
4
5
6
7
8
9
public class Main {
public static void main(String[] args) {
System.out.println("|\\_/|");
System.out.println("|q p| /}");
System.out.println("( 0 )\"\"\"\\");
System.out.println("|\"^\"` |");
System.out.println("||_/=\\\\__|");
}
}