Post

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의 합 출력  
	  }  
}
  • ❓ 스트림이란?

1

  • 출처 : 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("||_/=\\\\__|");  
    }  
}
This post is licensed under CC BY 4.0 by the author.