Python 알고리즘 테스터 코드 만들기
🧑‍💻 𝗣𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗶𝗻𝗴/Python

Python 알고리즘 테스터 코드 만들기

간단한 알고리즘 테스터 코드를 만들어보았습니다. 입력 파일과 출력 파일이 존재해야 테스터를 돌릴 수 있습니다.

이제 입력을 .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. 결과를 확인합니다.

 

 

 테스터 코드 압축 파일 

tester.zip
0.00MB

테스터 압축 파일입니다.

다운로드하시고 각자 상황에 맞게 수정하시면 될 것 같습니다.

 

 

 

 

 


 

 

728x90