간단한 알고리즘 테스터 코드를 만들어보았습니다. 입력 파일과 출력 파일이 존재해야 테스터를 돌릴 수 있습니다.
이제 입력을 .txt 파일로 넣고 한 번에 알고리즘을 테스트해 보세요.
가끔 가다보면 끝에 개행문자(\n)가 하나 더 있어서 False가 뜨는 경우가 있습니다. 종종 살피면서 코드를 돌려보세요.
# 알고리즘 입력 테스트 하기 # 알고리즘 출력 테스트 하기 # 알고리즘 Judge 파일
파일 구조
테스터 코드를 돌리기 위하여 필요한 파일 구조는 다음과 같습니다.
→ input 폴더
▶ input 파일들
→ output 폴더
▶ output 파일들
→ tester.py 파일
→ code.py 파일
input 폴더
input 파일을 넣은 폴더입니다. input 폴더의 이름은 [input] 으로 고정해주세요. (당연히 대괄호 제외하고 input 이라는 말)
폴더 내의 input.txt 파일들의 이름은 아무래도 상관없습니다.
output 폴더
output 파일을 넣은 폴더입니다. output 폴더의 이름은 [output] 으로 고정해주세요.
폴더 내의 output.txt 파일들의 이름은 아무래도 상관없습니다.
tester.py 파일
import io
import subprocess
import sys
import os
path_in = os.getcwd() + "/input"
path_out = os.getcwd() + "/output"
my = []
answer = []
# print("-- My Code --")
for i in sorted(os.listdir(path_in)):
old_stdout = sys.stdout
new_stdout = io.StringIO()
sys.stdout = new_stdout
sys.stdin = open(path_in + "/" + i, 'rt')
exec(open('code.py', encoding='utf-8').read())
res = list(sys.stdout.getvalue().strip())
sys.stdout = old_stdout
my.append(res)
print("-- Answer --")
for i in sorted(os.listdir(path_out)):
old_stdout = sys.stdout
new_stdout = io.StringIO()
sys.stdout = new_stdout
sys.stdin = open(path_out + "/" + i, 'rt', encoding='utf-8')
print(sys.stdin.read())
res = list(sys.stdout.getvalue().strip())
sys.stdout = old_stdout
answer.append(res)
for i in range(len(my)):
if my[i] == answer[i]:
print(True)
else:
print(False)
- 내 알고리즘 코드를 확인해주는 tester 코드 입니다.
- 실행 원리를 간단하게 얘기해드리자면, res 로 출력 값들을 받아서 내 코드의 출력과 /output 폴더 내의 파일들과 비교합니다.
- output 이 일치하면 True를 표시하며, 그렇지 않으면 False를 표시합니다.
- 알고리즘 코드를 확인하기 위해서 위 파일을 Run 실행해주시면 됩니다.
- [tester.py] 파일을 돌리게 되면 위와 같이 출력이 됩니다.
- 위는 1 ~ 4번 문제는 맞았고 5번 문제는 틀린 상황입니다.
code.py 파일
# 해당 코드는 예시일 뿐 입니다.
import sys
# sys.stdin = open('input.txt', 'rt')
n, m = map(int, input().split())
a = list(map(int, input().split()))
a.sort()
print(a)
- [code.py] 파일은 테스터를 돌리고 싶은 코드입니다. (위 코드는 그저 예시입니다.)
- 예를 들면, 알고리즘 문제 풀이 코드가 될 수 있습니다.
- 하지만 유의를 해주실 부분이 있습니다.
- 파일의 input들이 sys.stdin 으로 입력을 받기 때문에 해당 파일을 위처럼 주석처리를 하고 돌려주세요.
- sys.stdin = open('input.txt', 'rt) 이 부분을 주석처리해주시면 됩니다.
사용 예시
1. 예를 들면 제가 알고리즘 문제를 해결하기 위해 다음과 같은 코드를 작성했습니다.
import sys
sys.stdin = open('input.txt', 'rt')
n = int(input())
print(n + 1)
2. [code.py] 에 해당 코드를 넣습니다.
n = int(input())
print(n + 1)
code.py에 해당 알고리즘 코드를 넣을 때는 sys.stdin 으로 input을 받는 부분을 주석 처리하거나 삭제해주시면 됩니다.
3. 해당 예시들을 각각 input 파일에 넣습니다. 알고리즘의 input 예시 들은 다음과 같습니다.
in1.txt
1
in2.txt
2
in3.txt
3
in4.txt
4
in5.txt
5
4. 해당 예시들을 각각 output 파일에 넣습니다. 알고리즘의 output 예시 들은 다음과 같습니다.
out1.txt
2
out2.txt
3
out3.txt
4
out4.txt
5
out5.txt
6
5. [tester.py] 코드를 실행합니다.
각자의 환경에 맞게 코드를 실행해주시면 됩니다.
6. 결과를 확인합니다.
테스터 코드 압축 파일
테스터 압축 파일입니다.
다운로드하시고 각자 상황에 맞게 수정하시면 될 것 같습니다.
'🧑💻 𝗣𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗶𝗻𝗴 > Python' 카테고리의 다른 글
Python 리스트 요소끼리 같은지 비교하기 (0) | 2022.06.14 |
---|---|
Python 리스트 요소끼리 빼기 연산하기 (0) | 2022.06.14 |
Python 기본 문법 정리 (2) | 2022.01.27 |
Python 리스트 요소 한줄에 한번에 출력하기 (3) | 2022.01.16 |
Python sys.stdin.readline() 사용 / 알고리즘 입력 받기 (1) | 2021.11.29 |