반응형

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

 

위에는 문제 링크!

아래는 문제 캡쳐!

 

 


 

Java 로 풀었다!

나만 너무 어렵게 생각했나 ㅎ 많은 사람들은 엄청 쉽게 푼 것 같다.

나는 중간중간 문장도 넣었다

 

import java.util.Scanner;

public class cal {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner input = new Scanner(System.in);
		System.out.println("Your total price : ");
		int total = input.nextInt();

		System.out.println("How many kind of things did you buy? : ");
		int kind = input.nextInt();
		
		//위에서 나는 4하고 enter 를 치면, enter ("\n") 가 그 다음 input.nextLine() 메서드는 버퍼에 남아 있는 줄바꿈 문자 \n을 읽습니다. 그 결과 빈 문자열 ""이 abstr[0]에 저장됩니다.
		// 그걸 방지하기 위해 아래 부분에서 아래와 같이 남은 줄바꿈 문자를 소비
		input.nextLine();
		
		System.out.println("Then let me know all of the price and the EA" );
		String[] abstr = new String[kind];
		
		for (int i = 0; i<kind; i++) {
			abstr[i] = input.nextLine();
			String[][] absplitstr = {abstr[i].split("\\s")};
			int[] absplitint = {Integer.parseInt(absplitstr[0][0]), Integer.parseInt(absplitstr[0][1])};
			total -= (absplitint[0]*absplitint[1]);
		}
		
		if (total == 0) {
			System.out.println("Yes!");
		} else {
			System.out.println("no!");
		}

		
	}

 

 

참고로, 내가 17번 line 의 코드를 빼먹었을 때, abstr[0] = ""; 이렇게 빈칸이 들어가버리는 문제가 생겼고, 그 이유를 몰랐는데, Chat gpt 선생님이 친절하게 그 이유를 알려줬다.

아래는 gpt 답변!

 


abstr[0]에 빈 문자열 ""이 들어가는 이유는 Scanner 객체의 nextLine() 메서드가 이전 입력에서 남은 줄바꿈 문자(\n)를 읽어버리기 때문입니다.

아래에서 이 상황을 단계별로 설명할게요.

코드 동작 과정

  1. total 값 입력: 사용자가 input.nextInt()를 통해 정수 260000을 입력합니다. 이때 사용자가 입력한 값 뒤에 Enter 키를 누르면, 숫자 260000 뒤에 \n (줄바꿈 문자)이 입력 버퍼에 남아 있게 됩니다.
  2. kind 값 입력: 마찬가지로, input.nextInt()를 통해 정수 4를 입력합니다. 그리고 \n이 다시 입력 버퍼에 남아 있게 됩니다.
  3. 첫 번째 nextLine() 호출: 반복문 안에서 abstr[0] = input.nextLine();이 실행되면, input.nextLine() 메서드는 버퍼에 남아 있는 줄바꿈 문자 \n을 읽습니다. 그 결과 빈 문자열 ""이 abstr[0]에 저장됩니다.
  4. 이후 nextLine() 호출: 그 다음 반복에서 input.nextLine()이 호출될 때마다 사용자가 입력한 값을 제대로 읽게 됩니다.

해결 방법

이 문제를 해결하려면 nextInt() 다음에 nextLine()을 한 번 호출하여 입력 버퍼에 남아 있는 줄바꿈 문자를 소비해주면 됩니다.


 

 

이제 앞으로 습관을 들이자!

꼭! nextInt(); 를 쓰면, 아래에 input.nextLine(); 을 써줘서 "\n" 을 소비해주자!

 

int num = input.nextInt();

input.nextLine();

 

 

 

너무 어렵게 풀었나? 싶은 백준 문제 java 풀이 끝!

반응형

+ Recent posts