ToBe끝판왕

[ 알고리즘 ] 백준 10951번 문제 - 자바( JAVA ) 본문

■ 알고리즘/백준 JAVA

[ 알고리즘 ] 백준 10951번 문제 - 자바( JAVA )

업그레이드중 2022. 5. 27. 15:56
반응형

주의사항

※ 백준에서 정해진 출력 형식을 출력해야 한다.
※ 백준 알고리즘에서는 클래스명을 Main으로 해주어야 한다.

 


 

백준 10951번 문제

 

백준 알고리즘의 단계별 문제 풀기

3단계 < 반복문 >

 

 

 해당 문제 링

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

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 


 

코딩 하기

 

1) Scanner 사용

import java.util.Scanner;

public class Main {

	public static void main( String args[] ) {
    	
        Scanner sc = new Scanner( System.in );
        
        while( sc.hasNextInt() ) {
        
		int a = sc.nextInt();
            	int b = sc.nextInt();
            	System.out.println( a + b );
        }
        
        sc.close();
    }
}

 

 

2) BufferedReader 사용

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 ) );
        
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        String str;
        
        while( ( str = br.readLine() ) != null ) {
        	
            st = new StringTokenizer( str, " " );
            int a = Integer.parseInt( st.nextToken() );
            int b = Integer.parseInt( st.nextToken() );
            
            sb.append( a + b ).append( "\n" );
        }
        
        System.out.print( sb );
    }
}

 

 

 

문제 해결

 

※ 주의사항

•  두 정수는 공백으로 나뉘어 구분된다.

•  입력의 종료는 더이상 읽어올 수 있는 데이터 ( EOF ) 가 없을때 종료된다.

 

 

※ EOF 란 ?

End of File 의 약자로, 데이터 소스로부터 더이상 읽을 수 있는 데이터가 없음을 나타내는 용어이다.

알고리즘에서는 입력값을 얼마나 받을수 있는지 명시하지 않을 경우 EOF를 사용한다.

그래서 입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하는 것이다.

 

 

 

1) Scanner 사용

 

•  Scanner클래스의 메서드들 경우 더이상 읽을 데이터가 없다면 아래 사진과 같이

   NoSuchElementException 이 발생하게 된다.

 

•  예외를 처리하기 위해 두가지 방법이 있다

  -  try ~ catch문으로 예외 발생시 반복문을 종료해주도록 처리

  -  Scanner 메서드인 hasNext()을 통해 처리

 

•  hasNextInt( ) , hasNext( ) 둘중 하나 사용 가능 => 입력이 들어오지 않기 때문에 예외의 형태는 같다.

•  nextInt( ) 를 통해서 정수를 입력받아, 통일시키기 위해 hasNextInt( ) 를 사용하였다.

•  hasNextInt( )는 입력값이 정수이다면 true 반환, 정수가 아닐 경우에는 예외를 발생시키고

   false를 반환하며 반복문이 종료된다.

 while( sc.hasNextInt() ) {
        
int a = sc.nextInt();
             int b = sc.nextInt();
             System.out.println( a + b );
        }

 

 

 

2) BufferedReader 사용

 

여러번 말씀드렷다시피 BufferedReader는 readLine( ) 을 통해 한 행을 정부 읽기 때문에, 공백단위로 입력해 준

문자열을 공백단위로 분리해주어야 알고리즘 문제를 풀수 있다.

 

•  문자열 분리 방법 2가지

-  StringTokneizer 클래스 이용

-  Split( ) 메서드 이용

 

•  st.nextToken( ) 은 문자열을 반환하기 때문에 Integer.parseInt( ) 로 int형으로 형변환은 필수이다.

•  str에 저장된 데이터가 null일 경우, while반복문을 종료시키고 아닐경우 반복문을 계속 수행하도록 한다.

while( ( str = br.readLine() ) != null ) {
        	
            st = new StringTokenizer( str, " " );
            int a = Integer.parseInt( st.nextToken() );
            int b = Integer.parseInt( st.nextToken() );
            
            sb.append( a + b ).append( "\n" );
        }
        
        System.out.print( sb );

 

 

 

 

반응형
Comments