본문 바로가기

프로그래밍/C++

[C] 백준 풀 때 Tip. 답안 검토 시 파일로 입력 넣기

반응형

백준 풀면서 답안을 검토할 때 하는 것 중 하나가 입력의 최대치를 넣어보는 것이다.

이를 통해 시간초과가 발생할지, 값이 이상해지지는 않는지 확인할 수 있다.

하지만, 입력이 100만개씩 되는 경우가 있는데 이를 복사&붙여넣기를 하거나 일일이 입력할 수도 없는 노릇이다.

이 때 파일을 통해 입력하면 편하다.

 

1. 입력파일 생성하기

우선, 입력에 쓰일 파일을 만들 코드를 짜야한다.

18111번: 마인크래프트를 예시로 하면, 입력 코드를 아래처럼 구성할 수 있다.

#include <cstdio>

int main()
{
	printf("500 500 6500000\n");
	for (int i = 1; i <= 250000; i++)
		printf("%d ", i);
	printf("\n");
	return 0;
}

간단하다. 첫 줄에 N과 M, B를 출력한다. 문제에서 1 ≤ M, N ≤ 500, 0 ≤ B ≤ 6.5 * 10^7이라는 조건을 주었으므로 이 조건 내 최대치를 적어준다.

이후에는 가장 연산이 많을 것이라고 예상되는 1부터 500²의 수를 차례대로 출력했다.

이렇게 적고 실행하면 콘솔창에 결과가 뜨는데, 이를 복사&붙여넣기를 하면 힘들다.

그래서 다음과 같은 콘솔 명령어를 이용할 수 있다. (컴파일을 해야 수정 내용이 반영된다)

[프로젝트 폴더]\[파일이름].exe > [원하는 경로]\Input.txt

왼쪽 경로는 해당 소스파일을 컴파일 한 뒤의 생성된 파일이다.

가운데에는 '>'를 공백을 두고 입력하고

우측 경로에는 입력으로 쓰일 Input.txt를 원하는 경로와 같이 적으면 된다.

이렇게 입력 후 엔터를 누르면 아무런 일이 안 일어난 것 같지만 해당 경로에 가보면

위처럼 파일이 생성된 것을 확인할 수 있다. 내용도 잘 입력돼 있다.

 

2. 입력파일로 입력하기

main함수에서 입력을 받기 전 아래의 코드를 써준다.

FILE* file = fopen("[해당경로]\\Input.txt", "r");

이 때 경로를 표시하는 백슬래시(\)는 두번씩 적어줘야 한다.

그리고 기존 scanf를 fscanf로 바꾸고 첫 번째 인수에 file을 넣어주면 끝이다.

fscanf(file, "%d %d %d", &N, &M, &B);

 

3. 실행하기

VS기준에서 F10을 이용해 한 줄씩 디버깅하거나, 중단점을 찍고 디버깅을 하면 아래와 같은 진단도구가 뜨는데 여기서 사용 중인 메모리 크기와 실행시간을 확인할 수 있다.

답안 제출할 때는 다시 scanf로 바꾸는 것을 잊지말자

반응형