본문 바로가기

코딩테스트

[JAVA] 입출력과 사칙연산

2557 Hello World

기본적인 출력문제.

백준에서 자바 클래스명은 Main으로 해주어야한다. 

이전에 배운 것처럼 main() 메소드에서 프로그램 실행.

public class Main{
    public static void main(String[] args){
        System.out.print("Hello World!");
    }
}

위 방식은 표준 출력 스트림 System.out의 print() 메소드를 호출했다.

 

 

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
 
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
		bw.write("Hello World!");
		bw.flush();
		bw.close();
	}
}

두번째 방식은 BufferWriter를 이용했다.

BufferWriter/BufferReader 등은 Buffer에 있는I/O 클래스이다. 간단하게 요약하면 버퍼(임시공간)에 데이터를 저장한 후 한꺼번에 처리를 하기 때문에 Scanner/Print보다 속도가 빠르다.

다만 입력데이터를 가공하는 것 별로이다. 단순하게 읽고 저장하는 것만 목적일 때 사용한다.

Scanner는 다양한 데이터를 입력받고 가공할 때 사용!

 

또 BufferWriter/BufferReader는 예외처리가 필요하다.

속도가 빠른 이유 중 하나로 엔터(줄바꿈)만을 경계값으로 인식한다. 즉, readLine() 메서드를 이용한다.

이 readLine() 메서드는 null값이 들어오면(프로그램 인식 X) 예외처리를 하므로, readLine()을 사용하는 메서드도 예외처리를 해주어야 하는 것이다.

예외처리는 위처럼 throws IOExecptiond이나 try-catch 구문을 이용해준다.

 

생성한 BufferedWriter 객체에 "Hello World"를 저장하고, flush() 메소드로 한꺼번에 출력한다.

OutputStreamWriter는 BufferedWriter에 문자단위로 출력데이터 전달!


1000 A+B

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args){
 
		Scanner in = new Scanner(System.in);
		int A = in.nextInt();
		int B = in.nextInt();
		
		System.out.println(A+B);
 
		in.close();
	}
}

 

Scanner 클래스를 이용한 방법. 

키보드에 연결된 System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴한다. 공백(\t, \f, \r, ',', \n)으로 구분되는 토큰 단위로 읽는다.

System.in은 표준 입력 스트림으로 입력되는 키를 바이트로 리턴하므로 직접 사용은 잘 안함.

next(), nextByte(), nextInt() 등의 변환 메소드가 있다. nextLine(), hasNext()등의 메소드도 알아두면 좋다.

 

 

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));
 
 		String str = br.readLine();
		StringTokenizer st = new StringTokenizer(str," ");
        // StringTokenizer st = new StringTokenizer(br.readLine()," ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		
		System.out.println(a+b);
	}
}

BufferReader를 이용한 방법.

한 행을 읽을 때는 readLine(), 한 문자를 읽을 때는 read()를 사용한다.

String을 token 단위로 끊어주는 StringTokenizer 클래스를 이용했다. StringTokenizer('문자열', 구분자) 사용하기.

구분된 데이터는 nextToken으로 가져올 수 있고, 반환과 동시에 st 객체에서 사라진다.


1001 A-B

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
	public static void main(String[] args) throws IOException{
        
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
 		String[] str = br.readLine().split(" ");
		int a = Integer.parseInt(str[0]);
		int b = Integer.parseInt(str[1]);
		
		System.out.println(a-b);
	}
}

 

Tokenizer가 아닌 split()을 이용해 끊어서 입력받았다.

성능은 Tokenizer가 더 좋다고 한다.


10869 사칙연산

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));
 
 		String str = br.readLine();
		StringTokenizer st = new StringTokenizer(str," ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		
		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);
	}
}

println은 개행문자까지 포함, print는 없다. 띄어쓰기도 없다.

연산자는 이러한 산술연산자 말고 증감연산자(++,--), 대입연산자(+=, <<=), 비교/논리연산자 등이 있다.


10926 ??!

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
	public static void main(String[] args) throws IOException{
        
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
 		String str = br.readLine();
		
		System.out.println(str+"??!");
	}
}

JAVA에서 문자열 연결은 +를 이용해서 해주면 된다.


 

10430 나머지

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));
 
 		String str = br.readLine();
		StringTokenizer st = new StringTokenizer(str," ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
		
		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 곱셈

주어진 문자를 분리하고 형변환을 자유롭게 할 수 있는가?

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));

    int str = Integer.parseInt(br.readLine());
        String str2 = br.readLine();
    br.close();

        System.out.println(str*(str2.charAt(2) -'0'));
        System.out.println(str*(str2.charAt(1) -'0'));
        System.out.println(str*(str2.charAt(0) -'0'));
        System.out.println(str*Integer.parseInt(str2));

  }
}

charAt() 메소드는 String 각 인덱스 위치에 있는 문자값을 반환한다.

이때 반환되는 값은 아스키코드 값이므로 '-0'을 이용해 문자로 값을 바꿔준다.

이렇게 말고 나머지 연산을 이용해서 분리하지 않고 문제를 풀 수도 있다.

또 다른 방식으로는 toCharArray()라는 메소드를 이용하여 문자열을 Char 배열로 바꿀수도 있다.


10171 고양이

이스케이프 문자(\) 사용하기 + 개행

'\', ' " ' 와 같은 문자들은 앞에 이스케이프 문자를 붙여서 출력할 수 있다. 예를 들어 '\' 출력을 하려면 '\\'로 작성하면 된다.

개행은 newLine()으로.

문제의 의도는 알겠는데 그림그리기 너무 어렵당..

public class Main {
	public static void main(String[] args) {
    
		System.out.println("\\    /\\");
		System.out.println(" )  ( ')");
		System.out.println("(  /  )");
		System.out.println(" \\(__)|");    
 
	}
}

참고

https://ontheway.tistory.com/64

 

[Java] 빠른 입출력 : BufferedReader & BufferedWriter

1. BufferedReader & BufferedWriter란? 간단히 말해서 BufferedReader와 BufferedWriter란 버퍼를 이용하여 데이터의 입출력을 다루는 함수입니다. 그렇다면 우선 버퍼란 무엇일까요? 전에 버퍼에 대해 정리해둔

ontheway.tistory.com

 

Main.java - Java - Replit

 

Java

Run Java code live in your browser. Write and run code in 50+ languages online with Replit, a powerful IDE, compiler, & interpreter.

replit.com

자바 컴파일러 사이트는 위 사이트를 이용했다.

'코딩테스트' 카테고리의 다른 글

[JAVA] 문자열  (0) 2024.01.16
[JAVA] 1차원 배열  (0) 2024.01.14
[JAVA] 반복문  (1) 2024.01.13
[JAVA] 조건문  (0) 2024.01.12
[BAEKJOON] 24060 : 알고리즘 수업 - 병합 정렬 1  (0) 2023.07.28