대회 준비를 하기에 좋은 온라인 저지는 일반적으로 jungol.co.kr 이나 백준 사이트를 많이 이용하고 있습니다.
저는 두 군데를 자주 이용하고 있는 편인데요...
일단 두군데의 장점은 다음과 같습니다.
jungol.co.kr 은 제출 후 채점시 실패가 나온 경우에 채점 데이터를 보여 줍니다.
초보자에게는 채점 데이터를 보면서 자신이 어느 부분에서 생각을 못했는지 알 수가 있기 때문에 큰 도움을 받게 됩니다.
하지만 백준 사이트에서는 채점데이터를 보여 주지 않고 실패라는 메시지만 출력 됩니다.
이 경우에는 자신이 어디에서 잘 못 생각 하고 있는지를 알 수가 없습니다.
하지만 대회에서는 백준 사이트 처럼 실패를 했을때 채점 데이터를 보여 주지 않습니다.
따라서 대회를 준비하기 위해서는 백준 사이트 처럼 채점 데이터를 보여 주지 않는곳에서 연습을 하는 것이 훨씬 더 도움이 됩니다.
자신이 어떤것을 실수 했을때 그 막막함에서 실마리를 찾는 연습을 할 필요가 있기 때문입니다.
하지만 실제로 막막함을 찾기가 쉽지 않기 때문에 정올 사이트를 이용하면서 채점데이터를 보지 않고 해결하려고 노력하면서 정말 막막할때 살짝 채점데이터를 확인해 보는 것이 공부를 하는 방법중에 최선은 아닐까 라는 생각이 드네요.^^
오늘은 경시대회나 알고리즘 대회에서 좋은 테스트 입력 데이터를 만드는 방법에 대해 알아 볼까 합니다.
1. 먼저 주어진 입력 데이터를 테스트 해 보자 - 먼저 문제에서 출제되는 예제 데이터는 통과를 해야 됩니다.
2. 잘못된 입력 데이터를 만들어서 테스트 해 보자 - 잘못된 입력 데이터가 들어 왔을때 프로그램에서 어떤 행동을 해야 한다고 되어 있다면 그 부분은 반드시 테스트 해 보아야 합니다.
3.경계조건을 테스트 해 보자 - 가장 흔하게 실수하는 부분 중 하나가 이 경계 부분에서의 버그 입니다. 배열 크기를 잡을때 마지막 데이터를 입력 받지 못하는 경우가 가장 빈번하게 일어나는 실수 중에 하나입니다. 또는 아무내용도 입력되지 않거나 하나만 입력되는 상황등에 대해서 데이터를 테스트 해 보아야 합니다.
4. 정답을 알고 있는 조건에 대해서 테스트 해 보자- 좋은 테스트 케이스를 만드는 데 있어서 가장 중요한 것은 정답을 알고 있는 조건을 활용하는 것입니다. 이렇게 만드는 입력데이터는 손으로 풀 수 있는 만큼 간단한 것이어야 합니다. 작은 데이터를 문제에서 주어진 모든 경우의 데이터를 만들어 보는 것입니다. 이렇게 작은 데이터를 가지고 문제에서 주어진 모든 경우를 통과 한 후에 많은 데이터를 처리하기 위한 부분으로 확장을 하면 좋은 결과를 얻을 수가 있을 것입니다.
5.정답을 알지 못하는 큰 예제를 시도해 보자 - 정답을 알고 있는 조건은 보통 손으로 풀수 있는 간단한 예제뿐인데 아주 큰 예를 입력 했을때 출력되는 내용은 맞는 것인지 틀린것인지 판단하기가 힘듭니다. 하지만 큰 데이터를 입력했을때 값이 int 범위 내에서 출력이 되는지 long long 타입을 사용해야 될지 등을 판단 할 수가 있습니다. 또한 큰 데이터를 입력 했을때 프로그램이 죽거나 이상한 동작을 하는지 등을 점검해 보아야 합니다.
좋은 입력 데이터를 만드는 방법을 알아 봤는데요.
역시나 대회에서는 빠르게 생각하고 모든 경우를 생각해서 짧은 시간안에 코드를 구현해야 하는 만큼 입력 테스트 데이터를 만들어 볼 시간은 부족할 것입니다.
많은 훈련 기간에 이런 데이터 저런 데이터를 만들어 보면서 다양한 입력 데이터가 들어 오는 경우에 대비한 알고리즘을 구현하는 연습을 하는 것이 대회 준비의 가장 큰 지름길이 아닐까 라는 생각을 해 보게 되네요.
대회를 준비하는 학생들이 좋은 결과가 나오든 나오지 않든...
대회를 목표로 집중해서 공부하는 시간 만큼은 다른 시간에 비해 배의 학습효과가 있는 것을 알고 있습니다.
물론 단시간에 많은 훈련을 하기 위해 몸과 마음이 고단 한 것을 알고는 있지만...
이러한 훈련 속에서 자신의 성장하는 모습과 새로운것을 알아가는 희열을 맛보면서 노고에 대한 보상을 얻으시길 바랍니다.
오늘도 고생 하고 있는 학생 여러분 오늘도 화이팅~ 입니다.^^
'강의자료 > 정보영재' 카테고리의 다른 글
비둘기집 원리에 대해 알아 봅니다. (11) | 2019.08.12 |
---|---|
프로그래밍은 문제해결능력이다. (9) | 2019.08.09 |
몬티홀 딜레마 퍼즐 풀어 보아요. (12) | 2019.06.07 |
도전하세요. 생각하며 만드는 프로그래밍 트레이닝 소개 (8) | 2019.05.20 |
2019년 정보올림피아드 지역대회 후기 (6) | 2019.05.13 |