[백준/BOJ] 10951번: A+B -4 -C++ 문제 풀이

문제 설명

 

문제 링크: https://www.acmicpc.net/problem/10951

 

10951번: A+B - 4

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

www.acmicpc.net

 

풀이

문제만 읽었을 때는 구체적으로 원하는 것을 명확히 알기 어려웠다. 이 문항이 "단계별로 풀어보기"의 "반복문" 단계에 속해 있다는 것을 확인하고서야 방향을 잡을 수 있었다.

 

입력이 끝날 때까지 한 번에 두 개씩 정수를 읽어 합을 구한 후 출력하는 문제이다.

입력이 끝나는 시점이 언제인가를 알아낼 수 있다면 문제는 아주 간단하다.

int nReaded = 0, A, B;

while(true){
	nReaded = scanf("%d %d", &A, &B);
	if (nReaded == 2){
		printf("%d\n", A+B);
	}
	else{
		break;
	}
}

 

scanf 함수는 성공적으로 입력받은 데이터의 개수를 리턴하는데, 실패하는 경우 또는 파일의 끝(입력의 끝)에 도달하면 EOF를 리턴한다. C++에서 EOF는 파일의 끝의 약자로 -1로 정의되어 있다.

위의 코드에서는 숫자 두 개씩 입력을 받다가  EOF에 도달하면 함수가 종료한다.

 

int main() {
	int A, B, C;
	
	A = -1, B = -1, C = -1;	// 초기화
	int a = scanf("%d", &A, &B, &C);
	printf("first: %d, A=%d, B=%d, C=%d\n", a, A, B, C);

	A = -1, B = -1, C = -1; // 초기화
	int b = scanf("%d %d %d", &A, &B, &C);
	printf("second: %d, A=%d, B=%d, C=%d\n", b, A, B, C);

	A = -1, B = -1, C = -1; // 초기화
	int c = scanf("", &A, &B, &C);
	printf("third: %d, A=%d, B=%d, C=%d\n", c, A, B, C);
		
	return 0;
}

 

그럼 위의 코드를 실행하면 결과가 어떻게 될까?

결과는 다음과 같다.

23 45 67
first: 1, A=23, B=-1, C=-1

23 45 67
second: 3, A=23, B=45, C=67

third: 0, A=-1, B=-1, C=-1

첫 번째 테스트에선 한 번만 입력받으므로 1을 리턴한다.

두 번째 테스트에선 세 번 입력받으므로 3을 리턴한다.

세 번째 테스트에선 입력을 받지 않으므로 함수가 바로 리턴한다. 리턴값은 0이다.

 

결론을 말하자면, 값을 받아오는 변수의 개수가 중요한 것이 아니라, 입력받는 포맷의 개수가 중요하고 이에 따라 리턴값이 변경된다는 것이다.

 

표준 입력을 처리하는 방법에 관한 더 자세한 설명이 다음 링크에 있습니다. 도움이 되었으면 좋겠습니다.

https://codingembers.co.kr/5

 

[C++] 표준 입력 scanf() 함수와 객체 std::cin

scanf()와 std::cin 비교 scanf() 함수와 std::cin 객체 사용 모두 사용자의 입력을 받아들이는 방법입니다. 그런데 제목을 자세히 보신 분은 눈치챘겠지만 scanf()는 함수로 C부터 널리 사용되어 왔습니다.

codingembers.co.kr

 

소스 코드

#include <iostream>

int main() {
	
    int A, B;
    int nReaded = EOF;
    
    while(true){
	    nReaded = scanf("%d %d", &A, &B);
	    if (nReaded == 2){
	    	printf("%d\n", A+B);
	    }
	    else{	// 입력값을 두 개 못 읽거나 EOF에 도달했을 때
	    	break;
	    }
    }	
    return 0;
}

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유