inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

맥북(mac os) 자동 채점 방법을 고민해보았습니다.

558

milan

작성한 질문수 1

3

출력값이 긴 파일은 하나씩 눈으로 보고 체크하기가 어려워서 방법을 찾아보았습니다. 별다른 설치 파일 필요 없이 그냥 리눅스 명령어로 만들어진 쉘 스크립트만 생성해주면 되므로 간단합니다. 다른 언어로 개설된 강의를 듣는 mac유저들도 쉘 스크립트로 빠르게 채점이 가능할 듯합니다.

1. 쉘 스크립트 생성

 

 

작성한 코드가 있는 폴더에서  run.sh 파일을 생성합니다. 해당 파일을 열어서 아래 내용을 붙여넣어줍니다.

실행할 cpp 파일 명은 code.cpp로 바꾸어주세요.

#!/bin/bash
g++ code.cpp -o code
"./code" "./test/in1.txt" "./test/result1.txt"
"./code" "./test/in2.txt" "./test/result2.txt"
"./code" "./test/in3.txt" "./test/result3.txt"
"./code" "./test/in4.txt" "./test/result4.txt"
"./code" "./test/in5.txt" "./test/result5.txt"

echo "test1 :" && diff -w -s "./test/result1.txt" "./test/out1.txt"&& echo  " "
echo "test2 :" &&diff -w -s "./test/result2.txt" "./test/out2.txt"&& echo  " "
echo "test3 :" &&diff -w -s "./test/result3.txt" "./test/out3.txt"&& echo  " "
echo "test4 :" &&diff -w -s "./test/result4.txt" "./test/out4.txt"&& echo  " "
echo "test5 :" &&diff -w -s "./test/result5.txt" "./test/out5.txt"&& echo  " "

 

2. 채점 파일 등록 

해당 폴더에 test폴더를 생성하여 채점 파일에 있는 파일들을 넣어줍니다.

 

 

3. 메인 코드 수정

메인의 코드를 살짝 수정해주어야 합니다.

code.cpp파일을 열어 아래와 같이 수정 해 줍니다. 

 

 

int main(int argc, char* argv[]){
	freopen(argv[1], "rt", stdin);
	freopen(argv[2], "w", stdout);

main함수에 매개 변수를 입력할것이므로 인자를 넣어주고 결과 파일을 작성할 코드도 추가합니다.

 

4. 실행

cpp 파일이 있는 폴더에서 쉘 스크립트를 실행합니다.

$ sh run.sh

 

 

5. 결과 확인하는 법

성공

 

 

내가 작성한 코드의 결과값과 채점파일의 답이 일치하면 identical이라는 문구가 뜹니다.

 

실패

틀린 답은 해당 번호에 코드 출력 결과값을 보여줍니다.

 

 

구분선 --- 위쪽은 내가 작성한 코드의 출력값, 아래는 채점 파일의 출력값입니다. 


실행시간 확인하기

c++코드에서 시간 라이브러리를 넣어 측정할 수 있지만 귀찮아서 시간 측정은 잘 안했는데 리눅스 명령어로도 확인이 가능하네요.

#!/bin/bash
g++ code.cpp -o code
time "./code" "./test/in1.txt" "./test/result1.txt"
time "./code" "./test/in2.txt" "./test/result2.txt"
time "./code" "./test/in3.txt" "./test/result3.txt"
time "./code" "./test/in4.txt" "./test/result4.txt"
time "./code" "./test/in5.txt" "./test/result5.txt"

이렇게 실행 명령어 앞에 time 을 붙여주면 실행 시간을 출력해줍니다.

 

 

 


 

쉘 스크립트 문법을 몰라서 그냥 한줄 한줄 작성했는데 세련되어보이진 않지만 채점파일 추가,삭제는 직관적으로 가능하다는 장점이 있다고 우겨보겠슴다.

수정하고 싶은 부분은 간단한 검색으로도 많은 자료가 있으니 수정하셔서 사용하면 될 듯합니다.

궁금하거나 수정할 부분이 있다면 알려주세요.

 

C++ 코테 준비 같이 해요!

답변 2

2

김태원

안녕하세요^^

맥북 유저분들에게 도움이 되는 좋은 내용이네요^^

milan 님은 정말 좋은 사람인 것 같네요. 즐거운 주말 되세요^^

 

0

coli

정말 감사합니다.

 

테스트 케이스 질문

0

374

1

병합정렬 시간복잡도 질문

0

464

1

41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.

0

1351

2

질문드립니다.

0

378

1

질문드립니다!

0

432

1

dev 프로그램 질문

0

275

1

문제가 이해가 안되요

0

376

1

4번 나이차이 문제 접근법 질문 드립니다.

0

307

1

source file not compiled

0

1050

3

59번 질문드립니다.

0

373

1

25번 문제 질문

0

349

1

4. 나이차이 문제 질문입니다.

0

374

1

90번 라이언 킹 심바 1번 테스트 케이스

0

470

1

71번 문제 전역 변수 질문 있습니다

0

365

1

75번, 79번 priority_queue관련

1

356

1

75.최대 수입 스케줄

0

401

2

복면산 정답의 수

0

432

1

테스트 케이스에 대해서

0

447

1

수업 내용 질문입니다!

1

233

1

풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!

0

825

2

12. 플로이드-와샬(그래프 최단거리) . 27:25초

0

255

1

다른 풀이 방식

0

317

1

크루스칼 vs 프림

0

309

1

숫자 총개수 small 질문있습니다.

0

243

1