티스토리 뷰

일기

내 장단점 분석글

지구이 2018. 3. 27. 09:44

0. 한 사람의 장단점을 분석하는 것은 엄청나게 어렵다고 생각합니다. 특히 CP에서 제출 시간과 등수만으로 장단점을 분석하는 것은 불가능에 가깝습니다. 때문에 제가 그동안 연습하면서 분석한 제 단점(과 일부의 장점)을 대회 코드와 제출 로그와 함께 정리하려고 합니다.





요약


1. 단점

1) 잔실수가 매우 많고, 그것들을 고치기 위한 디버깅에 시간을 많이 쓴다.

2) 수식을 이해하는 속도가 매우 느리고, 수식, 코드, 풀이를 증명하는 것을 매우 힘들어한다.

3) 경우가 많아질수록 시간이 배로 오래 걸리거나, 분석에 실패한다.


2. 장점

1) 문제 풀이를 대부분 생각할 수 있거나, 빠르게 생각할 수 있다.

2) 단점에 해당하지 않는 문제에 강하다.





1. 단점

1) 잔실수가 매우 많고, 그것들을 고치기 위한 디버깅에 시간을 많이 쓴다.


코딩 실수는 잘하는 사람들도 많이 합니다. 다만 그것들을 디버깅하는 능력이 뛰어나기 때문에 금방 고치게 됩니다.


하지만 저는 디버깅을 좋게 끝낸 기억이 거의 없습니다. 집중력이 최상이 아닐 때 코딩을 하면 코드에 실수가 많이 나타나게 되고, 나타나는 위치가 상상을 초월하는 것들이기 때문에 엄청나게 오래걸립니다. 거기다가 2번 단점 때문에 코드의 정적분석 능력이 현저히 낮아서이기도 합니다.


(1) NEERC, Southern Subregional E.


디버깅하는데 40분이 걸린 코드입니다. 2인 연습이기 때문에 상수가 D를 짜는 동안 E 코드를 보면서 디버깅했습니다. 코드 길이는 매우 짧고, 때문에 코드 전체를 보는데는 시간이 얼마 걸리지 않았습니다. 하지만 결국 40분동안 틀린 부분을 못찾았고, 결국 상수가 옆에서 찾아주었습니다.



(2) ARC 084 E



 대회시간 내에 해결하지 못한 문제입니다. 문제 자체도 3번 단점에 걸려서 약한 문제였지만, 안간힘을 써서 풀이를 만들어놓은 경우입니다. 대회 마지막 제출은 예외케이스 하나를 잘못 코딩해서 틀렸습니다.



(3) CF 472 Div1 D


어제 연습한 코포 라운드입니다. 


풀이는 바로 생각했던 것 같은데, 부등호 몇개를 잘못쓰고, 몇가지를 착각해서 여러번 틀렸습니다. 특히 마지막으로 고친 부분은 예외처리를 했으나, 처리를 잘못 한 것입니다.



(4) Yandex Algorithm 2018, R2


 이번에는 문제 독해 미스입니다. 문제에 분명히 "모든 쌍에 대해 만족할 필요는 없다" 라고 써져 있었고, 그것을 설명하는데 5줄이나 예시를 들어 설명했음에도 불구하고, 그것을 "모든 쌍에 대해 만족해야 한다"로 잘못 이해해서 거의 30분을 날렸습니다. 풀이가 맞는 줄 알고 중간에 코딩도 했기 때문에 많은 시간을 소모했던 것 같습니다.


(5) 잡담


 이것 말고도 포커 문제를 1시간동안 디버깅했다던가, 혼자 연습하면 코딩실수를 못찾아서 데이터를 까는 경우가 매우 많습니다. 실수를 많이 하고 있고, 그것을 알기 때문에 일상생활에서는 여러번 검증해서 실수를 줄이려고 노력하고 있습니다. 하지만 시간이 정해진 대회, 특히 문제를 푼 시간이 순위에 반영되는 대회에서는 해결방법이 딱히 떠오르지 않습니다.


 초6때부터 수올문제에서 (난이도에 상관 없이) 사칙연산에서 자주 실수가 나왔고, 이것을 빠른 속도로 모든 문제들을 풀어 검산 시간을 늘리는 방식으로 해결했습니다. 그래도 실수는 많았기 때문에 학교 성적은 그리 좋지 않았고, 때문에 중등 KMO 2차 등수와 전교 수학 등수가 비슷한, 이상한 사람이 되었습니다. 


아마도 제가 다른 사람들처럼 일반고에 수능쳐서 대학교를 갔다면, 수능 평균 2-3등급 받고 좋은 대학교 가서 느긋하게 살고 있었을 것 같습니다.



2) 수식을 이해하는 속도가 매우 느리고, 수식, 코드, 풀이를 증명하는 것을 매우 힘들어한다.


 무언가를 증명하려는 시도를 하면 이상하게 집중이 잘 되지 않습니다. 증명을 하기 위해서는 증명만 생각해야 하는데, 다른 잡다한 생각들이 계속 끼어들어와 집중을 방해하는 느낌입니다. 이 단점은 도저히 해결방안이 떠오르지 않아서 현재는 포기한 상태입니다.


 팀연습때는 페어코딩을 해야 하는 경우가 많은데, 이것 때문에 옆에서 코드를 보는 것이 진짜 도움이 되고 있는건가에 대해 의문이 들고 있습니다.


 아래 예시는 풀이 구체화에 대한 내용이 많은데, 풀이를 세우고 나서도 확인하는 것이 오래 걸리고, 틀렸으면 다시 세워야 하는 식으로 이상한 순환이 걸려 실패하는 경우가 많습니다.


(1) ARC 076 F


 풀이 개요는 거의 바로 나왔지만, 구체화를 시키는 것에 문제가 생겨 엄청나게 오래 걸린 경우입니다. 쿼리의 경계에서 왼쪽 1칸인지 오른쪽 1칸인지 라던가, 개수가 많아야 하는지 적어야 하는지, 혹은 1개 초과로 많아야 하는지 등등.. 결국 간신히 완성은 했지만 완벽하지 않았고, 결국 대회중에는 해결하지 못했습니다.


(2) JOI 3번 dango_master, 4번 commuter_pass


 4번은 풀이 개요는 나왔지만, 그래프 구성을 잘못 했고, 그것을 매우 늦게 알아차려서 1시간~2시간정도 소모했습니다.

 3번은 먼저 문제를 잘못 이해했고, 제대로 이해한 이후에도 dp식을 정의하여 점화식을 세우면 되는 지점에서 결국 실패해 문제를 해결하지 못했습니다. (지금 보면 쉬운 dp였다고 생각하지만, 저런 것들을 제가 힘들어하는 이유를 아직 명확하게 알지는 못합니다.)


(3) Codefestival qualB D


간신히 Codefestival 예선을 통과한 그 라운드입니다. 문제도 어렵긴 했지만 결국 틀린 풀이를 한참동안 잡고있다가 문제를 버렸고, 돌아와서도 구체화에 엄청난 어려움을 겪어 겨우 풀었습니다.


(4) Codefestival qualA D


어려운 문제가 아니었고, 정해를 꽤 빠르게 생각했지만, 경계에서 제대로 안된다고 착각하여 틀린 풀이라고 판단했습니다. 결국 엄청나게 이상하고 말도 안되는 풀이로 겨우 풀었습니다.


(5) Codefestival Final I



 틀린 풀이를 한참 잡고 있었던 경우입니다. 몇 가지 가정을 했지만, 잘못된 가정이 하나 섞여있었고, 그것을 알아차리지 못해 문제를 끝까지 해결하지 못했습니다. 저 대회에서는 잘못한 점이 한두개가 아니지만, 저것이 가장 컸다고 생각합니다.


(6)  Yandex Algorithm 2018, R1

 

 처음에는 문제를 잘못 이해했고, 그 다음에는 문제를 잘못 풀었고, 마지막으로 예외처리 하나를 못해서 저렇게 많은 WA를 냈습니다.


(7) 잡담


 아이디어도 못잡아서 문제를 못푸는 경우는 공부를 하면 해결할 수 있지만, 이런것들 때문에 대회를 망치는 것은 해결방법을 잘 모르겠습니다. 지금은 해탈(?)해서 개인대회에서 저정도로 망해도 그러려니 하고, 다른 사람들이 저에 대해서 평가하는 것들도 그냥 흘려듣고 있습니다. 


 가장 큰 문제는 ICPC에서입니다. 저런 류의 실수가 한번이라도 나면 그 대회가 박살이 나는데, 그런 짓을 거의 매 대회마다 하다보니 코딩을 할 엄두가 나지 않습니다. 그래서 제가 언제 코딩을 들어가야 하는지를 잘 모르겠습니다.



3) 경우가 많아질수록 시간이 배로 오래 걸리거나, 분석에 실패한다.

 

 2번 단점과 비슷한데, 케이스 분석을 시작하면 점점 잡생각이 끼어들어와 집중이 잘 되지 않습니다. 그래서 케이스 분석을 할 때면 엄청나게 답답한데, 이것도 위와 마찬가지로 해결방법을 모르기 때문에 엄청나게 짜증나는 경우입니다.


(1) CF 403 B


 B가 C, D보다 어려운 문제였습니다. 제 기억에는 경우를 잘 나눠서 처리해야 했는데, 도저히 나눌 수가 없어서 몇번 시도하다가 다른 문제로 넘어간 경우입니다.


(2) 잡담


  대회중에도 "이것만 정리하면 문제를 풀 수 있다"라고 생각하지만 결국 정리를 못해서 못푸는 경우가 너무 많아 가장 먼저 떠오르는 단점입니다. 예전부터 이것 때문에 대회를 망치는 일이 너무 많았습니다.



2. 장점

1) 문제 풀이를 대부분 생각할 수 있거나, 빠르게 생각할 수 있다.


 정확히는, 코딩을 아무리 연습해도 느는 것에는 한계가 있어서 풀이라도 연습하자는 느낌이 있습니다. 위에서 제시한 대회들 중 Yandex Algorithm R2와 Codefestival qual B는, 저런 삽질을 하고도 나머지 문제를 빠르게 풀었기 때문에 높은 등수를 받을 수 있었습니다.


2) 단점에 해당하지 않는 문제에 강하다.

 

 당연한 말입니다.


3) 잡담


 장점을 체계적으로 분석하는 취향은 없어서 장점을 쓸 것이 딱히 없는 것 같습니다. 그냥 단점이 아닌 것들을 장점이라고 생각하고 있습니다.




3. 또다른 잡담


 제가 왜 그토록 대회를 계속 망하고있는지 대회를 치면서 생각했던 것들을 정리해봤습니다. 열심히 분석한 결과가 "해결책을 모르겠습니다"여서 많이 아쉽지만, 그런 짓을 10년 넘게 하고있으면 정말로 해탈하게 되는 것 같습니다. (그래도 저런 어이없는 이유들로 대회를 망치면 짜증나긴 합니다.)

 

 최근 6개월동안 참가한(연습이 아닌) 개인대회 중 AGC 몇개와, CF 라운드 몇개를 제외하고는 여기 전부 올라왔습니다. 그러니까, "수많은 대회 중에 우연히 몇개에서 저랬다"가 아니라, "수많은 대회에서 대부분 저러고 있다"가 됩니다.


 5시간 개인 대회는 그나마 사정이 나은것이, 컴퓨터를 마음껏 쓸 수 있기 때문에 디버깅에 무리가 없고, 풀이에서 시간을 벌었기 때문에 디버깅을 할 시간이 됩니다. 하지만 컴퓨터를 잡고있지 않을 때는 디버깅 능력이 떨어지고, 디버깅 시간이 길어질수록 멘탈이 갈려나가기 때문에 힘든 것 같습니다.


 저 단점들은 매우 예전부터 알고있었던 단점입니다. 단점을 고치기 위해 여러 시도를 해봤지만, 코딩 연습을 열심히 해도 효과는 없었습니다. 그래도 아직도 코딩은 계속 하고 있습니다. 

'일기' 카테고리의 다른 글

9.30 잡담  (0) 2018.10.01
UCPC 2018 출제 후기  (3) 2018.08.15
3월 25일 GP of America 연습  (0) 2018.03.27
2월 18일 GP of Gomel 연습  (0) 2018.02.19
1월 16일 CEPC 09 체험  (2) 2018.01.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함