정글에서 온 개발자
알고리즘, 코드로 반례 찾기 본문
코드
import random
A = 0 # 구간의 최소값
B = 1000 # 구간의 최대값
L = 100 # 배열 최대 크기
def correct_solution(numbers):
answer = numbers
# 정답 코드
return answer
def my_solution(numbers):
answer = numbers
# 내 풀이 코드
return answer
def generate_random_numbers(a,b,n):
return [random.randint(a,b) for _ in range(n)]
def compare_solution(numbers, i=0):
result1 = correct_solution(numbers)
result2 = my_solution(numbers)
if result1 != result2:
print(f"Test {i} failed")
print(f"Input: {numbers}")
print(f"correct: {result1}")
print(f"mine: {result2}")
else:
print(f"Test {i} passed")
def compare_solutions(test_count):
for i in range(1,test_count+1):
numbers = generate_random_numbers(A,B,L)
compare_solution(numbers, i)
print("Comparison completed.")
compare_solution([0,0]) # 엣지 케이스 테스트
compare_solutions(100) # 무작위 숫자를 생성하여 비교 테스트
- 코드에 나와있듯이 무작위로 배열을 만들어서 정답을 비교하고 맞으면 pass, 틀리면 자세한 로그를 출력한다.
사용 후기
- A~B의 범위, 배열의 최대 크기가 작으면 반례를 찾을 확률이 늘어났다.
- 테스트 횟수는 100~200 정도로 맞추고 범위를 줄이는 게 좋다.
- 엣지 케이스는 따로 돌려보면 좋다.
번외
- 프로그래머스나 leetCode, Codility 등은 다음과 같이 solution 함수로 정답을 제출한다.
def solution(numbers):
return answer
- 위와 같은 구조는 프로그래머스의 IDE 상에서도 아래 간단한 코드를 더해서 간단한 엣지 케이스 테스트를 해보기 편하다.
print(solution([0,0])
- 해당 IDE는 solution의 입출력만 검사하기 때문에, 테스트시에 정답 여부에 영향을 미치지 않는다
코드
import random
A = 0 # 구간의 최소값
B = 1000 # 구간의 최대값
L = 100 # 배열 최대 크기
def correct_solution(numbers):
answer = numbers
# 정답 코드
return answer
def my_solution(numbers):
answer = numbers
# 내 풀이 코드
return answer
def generate_random_numbers(a,b,n):
return [random.randint(a,b) for _ in range(n)]
def compare_solution(numbers, i=0):
result1 = correct_solution(numbers)
result2 = my_solution(numbers)
if result1 != result2:
print(f"Test {i} failed")
print(f"Input: {numbers}")
print(f"correct: {result1}")
print(f"mine: {result2}")
else:
print(f"Test {i} passed")
def compare_solutions(test_count):
for i in range(1,test_count+1):
numbers = generate_random_numbers(A,B,L)
compare_solution(numbers, i)
print("Comparison completed.")
compare_solution([0,0]) # 엣지 케이스 테스트
compare_solutions(100) # 무작위 숫자를 생성하여 비교 테스트
- 코드에 나와있듯이 무작위로 배열을 만들어서 정답을 비교하고 맞으면 pass, 틀리면 자세한 로그를 출력한다.
사용 후기
- A~B의 범위, 배열의 최대 크기가 작으면 반례를 찾을 확률이 늘어났다.
- 테스트 횟수는 100~200 정도로 맞추고 범위를 줄이는 게 좋다.
- 엣지 케이스는 따로 돌려보면 좋다.
번외
- 프로그래머스나 leetCode, Codility 등은 다음과 같이 solution 함수로 정답을 제출한다.
def solution(numbers):
return answer
- 위와 같은 구조는 프로그래머스의 IDE 상에서도 아래의 간단한 코드를 더해서 간단한 엣지 케이스 테스트를 해보기 편하다.
print(solution([0,0])
- 해당 IDE는 solution의 입출력만 검사하기 때문에, 테스트시에 정답 여부에 영향을 미치지 않는다.
백준 코드도 이런식으로 입,출력을 함수로 감싸는 습관을 들이면 테스트에 도움이 될 것 같다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 카펫. 소인수분해는 소수를 구해야 한다는 고정관념. (0) | 2024.05.10 |
---|---|
[프로그래머스] 소수 찾기 (0) | 2024.05.10 |
[프로그래머스] 가장 큰 수. 반례와 경우의 수 나열 (0) | 2024.05.10 |
백준 - 트럭(13335) (0) | 2024.04.18 |
백준 - 이중 우선순위 큐(7662) (0) | 2024.04.14 |