본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 10951번] A+B-4문제 (hasnext)

728x90
문제 10951) A+B-4

 

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

입력) 
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력) 각 테스트 케이스마다 A+B를 출력한다.

두 값을 넣으면 A+B가 출력이 되면 됩니다.

 

NO 입력 출력
1 1  1 2
2 2  3 5
3 3  4 7
4 9  8 17
5 5  2 7

 

저는 이 문제를 풀지 못했습니다. 왜냐면 문제 자체를 제대로 이해하지 못했기 때문입니다.

 

그래서 입력 값을 배열로 받고 출력도 해보고 했지만 결국 실패만 했습니다.

 

그 이유는 제가 n 값을 지정해서 입출력 예시처럼 5개만 입력되도록 지정했기 떄문입니다.

 

이 문제에서 의도한 것은 A + B라는 값을 계속해서 입력 받고 출력하는 것입니다.

 

그치만 계속해서 while로 출력하는 것은 아닙니다. 일단 아래의 코드를 먼저 보겠습니다.

 

 

정답 코드)

package JAVA1225;

import java.util.Scanner;

public class Main_05 {

	public static void main(String[] args) {
			
		Scanner sc = new Scanner(System.in);

		int a, b;
		
		do {
			a = sc.nextInt();
			b = sc.nextInt();
			System.out.println(a + b);

		}while(sc.hasNext());
	}
}
여기서 while(true)로 하면 런타임 에러로 틀리게 됩니다.

그래서 hasnext()로 제한을 하면 정답이 됩니다.

 

◎ hasnext()란?

   ▷ 다음에 가져올 값을 boolean 타입으로 반환하는 것입니다.

   ▷ 값이 있으면 true, 없으면 false 입니다.

 

   ▷ 이 문제에서 의도한 것은 sc라는 값이 입력되다가 다음에 가져올 값이 없으면 false로 출력이 안되도록 하는 것입니다.

 

 

여기서 hasnext는 iterator의 method입니다.

 

 iterator()이란?

   ▷호출하면 iterator의 객체를 반환하고 자바의 컬렉션에 저장되어 있는 요소들을 읽어오는 방법의 인터페이스입니다.

   ▷이 인터페이스는 처음부터 끝까지 하나씩만 가져올 수 있습니다.

 

   ▷ iterator method

      ▶ hasNext() : 다음 가져올 값을 boolean 타입으로 반환합니다.

      ▶ next() : 다음 요소를 가져옵니다. Stirng은 String, 숫자는 숫자로 값을 가지고 오는 것입니다.

      ▶ remove() : next()로 읽어온 요소를 삭제합니다.

         => 호출 순서 : hasNext() → next() → remove()

 

제가 이해한 것으로는 iterator은 객체에 보관하고 있는 자료들을 순차적으로 접근하면서 처리할 수 있게 해줍니다.

 

사용시에는 hasNext()로 다음 값이 있는지 확인하고 next()를 통해 값을 읽어들여 원하는 작업을 처리할 수 있습니다.

 

위의 예제에는 hasNext()로 값을 확인하고 nextInt()를 통해 값을 읽어들이는 것입니다.

 

조금 내용이 어렵긴하지만 다음번에 유사한 문제가 있다면 한 번 더 다뤄보도록 하겠습니다!!

 

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

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90