인프런 커뮤니티 질문&답변

milan님의 프로필 이미지
milan

작성한 질문수

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

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

작성

·

434

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 을 붙여주면 실행 시간을 출력해줍니다.

 

 

 


 

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

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

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

 

답변 2

2

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

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

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

 

0

정말 감사합니다.

 

milan님의 프로필 이미지
milan

작성한 질문수

질문하기