알고리즘 대회/TopCoder SRM 실전

네 번째 Event - SRM 583 DIV 2

방랑여행 2013. 6. 19. 02:41

DIV 2로 강등되고 나서 처음 시도하는 SRM.

 

[결과]

- 이지는 빨리 풀었으나, Mid를 테스트하느라 내는 게 늦었다.

   - 이지 : 238.97 / 250

   - 미드 : 234.59 / 550

- 그리고 챌린지가 하나 실패해서, 결과적으로는 109등. / 800명

- 레이팅은 916 -> 1040 으로 +124 이다.

 

 

[과정]

처음에 이지를 풀고 간단히 테스트 하고 제출했다. 이후 미드를 열었는데 너무 어려웠다.

답이 잘 나오지 않아서 10분쯤 고민한 뒤 Hard를 열었는데, 이상하게 방금 본 문제와 똑같은 문제였다.

알고 보니 내가 미드가 아닌 하드를 열어버렸던 것.

 

하드를 닫고 나서 미드를 풀었다.

그냥 말하는 대로 모두 구현만 하면 되는 문제였는데,

내가 좀 비효율적으로 구현하기도 했고, 다 구현하고 나서도 테스트하느라 많은 시간을 소비했다.

 

하드 풀 시간은 되지 않아서 챌린지 set를 만들었는데,

생각보다 쓸모가 없었다. 왜냐하면, 이 문제는 어떤 경우를 만족하지 않는 모든 경우 Invalid를 출력하고,

만족하는 경우에만 답이 달라지는데,

 

내가 '원래 Vaiid 가 나와야 하는데 Invalid가 나오는 세트' 를 만들기가 쉽지 않았기 때문이다.

만일 'Invalid가 나와야 하는데 Vaild가 나오는 답' 을 만들어서 시도하는 경우, 챌린지 실패할 가능성이 높다.

왜냐하면, 이 사람이 원래 코드를 잘못 짜서 되는 경우에도 Invalid를 출력하게 할 가능성이 크기 때문이다.

 

[배운 점]

- 이지 풀고 하드를 먼저 열어보자. 풀만하면 풀고, 아니면 안 풀면 된다.

- 챌린지를 잘 하자! - Challenge를 함부로는 하지 말자. (안 했으면 20등은 올랐을 점수이다.)

   - 할 거라면 그냥 시도하지 말고, 이 코드에 내 챌린지 input을 넣어본 뒤에 동작을 예상하고 나서 도전하자.

   - 완벽해 보이는 코드들도 생각보다 빈틈이 많다. 꼼꼼히 읽어보고 챌린지를 시도하자.

- 내 코드를 돌려보면서 챌린지를 만들어야 하는데, VS에 복사해 놓고 거기서 만들어보자.

  - 이유 : Challenge Phase에서는 더이상 컴파일이 되지 않는다 !!

  - 완성된 챌린지 input은 메모장 등에 (맞는 답 / 틀릴 이유 / 틀려서 나올 답)을 적어서 저장해두자.

 

- 이번 미드처럼, 짜는 데는 금방 끝냈지만 테스트 할 것이 많은 경우,

   어느 정도 확신이 들면 미리 Submit을 하는 것도 좋은 전략인 것 같다.

- 어떤 조건을 만족시키지 못해서 return "Invalid"인지를 쓸 때, return의 문자열을 변경시키면 무지 귀찮아진다.

   시간도 많이 잡아먹는다.

   그 대신, 다음과 같이 cout을 활용하자.

if(조건 불만족시)
{ 
   cout << "날짜 오류" << endl; 
   return "Invalid";
}

   (물론 이 출력문이 시간 복잡도에 영향을 미치지 않을 때.)