백준 10951 - java ) A+B-4

2021. 8. 24. 18:12코딩/Python

내 사고과정 

앞선 A+B-5 문제의 경우 0 0 이라는 종결 조건을 줬는데 여기서는 종결 조건이 따로 제시되지 않았다. 

그럼 내 임의로(-값을 입력했다거나..) 종결 조건을 만들어서 프로그램을 끝내야 하는 건가 싶었다. 

 

내 실행 코드 

import java.util.Scanner; 

public class Test {
	public static void main(String[] args) {
	
	Scanner sc = new Scanner(System.in);
	
	while(true){
		
		int a = sc.nextInt();
		int b = sc.nextInt();
		
		if(a<0 || b<0) {
			sc.close();
			
			break;
		}
		System.out.println(a+b);
	}
	  }
	}

그래서 while문 내에 있는 if문 조건식을 음수일때로 바꿔보았다. 

그래서 어찌저찌 종결되긴 했는데, 이건 문제 의도와 맞지 않는 것 같고 사용자가 - 값을 입력할 것이라는 예측이 전혀 되지 않기 때문에 틀린 답 같았다. 

 

내 실행결과 

1 1 
2
-1 2

-1 2 코드에서 종료되었다. 

 


* EOF (End of File) 

 - 파일의 끝 

 - 입력에서 더이상 데이터를 입력할 수 없는 경우 

 

자바 EOF에 대해서 알아보자 

EOF처리를 위해서는 2가지 방법이 있다. 

 

1) Scanner 클래스 

hasNext() 메소드 : 입력된 토큰이 있으면 true를 반환하고, 그렇지 않을 경우 false 반환 

 

Scanner sc = new Scanner(System.in);

while(sc.hasNext()) { 
	System.out.println(sc.nextLine());
}

2) BufferedReader 클래스 

Scanner와 달리 EOF를 처리하는 내장 함수는 없다 (hasNext같은) 

BufferedReader br = new BufferedReader(new InputStreamRedaer(System.in));
String input="";

while((input=br.readLine())!=null){

}

br.readLine()으로 입력값을 계속 읽되, 읽은 값이 null이면 반복문 종료 

 

* 토큰이란? 

토큰이 문자열(의미)의 최소 단위인건 알고 있었지만, 크게 와닿지가 않아서 다시 한번 searching 해보았다. 

"08:45" 08시 45분이라는 문자열이 있다고 가정해보자.

시 정보(08)와 분 정보(45)는 :(콜론)을 기준으로 나뉘어져 있다. 콜론의 역할은 '구분자'이다.

이 구분자를 기준으로 나뉘어지는 문자열 정보를 토큰이라고 한다. 

콜론을 기준으로 토큰을 추출하고자 하면 StringTokenizer 클래스를 이용한다 

StringTokenizer st=new StringTokenizer("08:45",":");

첫번째 인자인 "08:45"는 문자열 데이터를 전달하며, 두번째 인자인 ":"는 구분자 정보를 전달한다. 

 

인스턴스를 생성했다면 메소드 호출을 통해 순서대로 토큰을 반환한다.

public String nextToken()

토큰의 개수대로 메소드를 호출하면 된다. 만약 토큰의 수를 정확하게 판단하기 힘들다면 아래의 메소드 이용

public boolean hasMoreTokens()

수정된 코드 

 

import java.util.Scanner; 

public class Test {
	public static void main(String[] args) {
	
	Scanner sc = new Scanner(System.in);
	
	while(sc.hasNextInt()) { // hasNext()도 상관 없음. 정수를 입력받고자 했으니 nextInt()가 더 가독성 좋음. 
			
		int a = sc.nextInt();
		int b = sc.nextInt();
		System.out.println(a+b);
	}
	sc.close();
	  }
	}

수정된 실행 결과 

1 1 
2
2 2 
4
3 3 
6
0.5 2

0.5 2 처럼 소수를 입력하니 더이상 입력이 되지 않았다. 

 

==> 결국 이 문제에서 필요한 건? 예외처리 ! 

==> hasNext()는 boolean 타입으로 반환되며, "True or False"로 반환된다.

다음에 가져올 값이 있으면 True, 없으면 False 

 

참고 ) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=fb_lua&logNo=221353037621 

 

[자바 강좌] 제 73강 문자열 토큰(Token)의 구분

안녕하세요. 자바 강좌중인 Falcon 입니다. 이번에는 문자열을 조건에 따라 나누는 방법에 대해 설명하려...

blog.naver.com

 

'코딩 > Python' 카테고리의 다른 글

닥터 앤서, 한국형 AI의사  (0) 2021.08.27
백준 1110 - java ) 더하기 사이클 (*)  (0) 2021.08.24
백준 10952 - java ) A+B-5  (0) 2021.08.24
백준 10871 - java ) X보다 작은 수  (0) 2021.08.24
백준 2439 - java ) 별찍기-2  (0) 2021.08.24