sgc109   9년 전

여러 분들의 실제 대회장 또는 예선에서 코딩하실때 주석첨가여부, 변수명명스타일 등에 대해 알고싶습니다.

제 경우에는 만약 어떤 유지보수가 필수적인 비교적 큰 프로그램을 만들땐 변수이름이나 주석에 신경을 쓰게되는데

대회에서는 시간도 중요하니 변수이름이나 주석에 거의 신경을 쓰지않았더니 한번은 머리속으로 거의 모든부분을

빠짐없이 고려했다고 생각하고 코딩을 시작했는데 중간에 생각치 못한 부분때문에 막혀서 당황하고 디버깅도 많이 하게된적이

있었는데 그때 까지 짜여져있던 소스가 정말너무 복잡했던겁니다.. 그래서 뭔가 미궁속에 빠진느낌이들었고 열심히 코드를 수정하면서 몇번더 제출을해봤지만 틀렸었고 멘붕에빠져서 그냥 소스를 지워버리는 결과까지 발생했었습니다..

그래서 저는 여러분들이 실전에서 변수명명이나 주석에 대해 어떻게 생각하시는지 궁금합니다.

또 주변에 ACM을 즐기는 사람이 거의없는 관계로 많은 분들이 3인 1팀으로 대회에 참가했을때 역할을 어떤식으로 나누시며 어떤방식으로 푸시는지 항상 궁금해왔습니다. 물론 왕도는 없을것이고, 사람마다 스타일이 다르겠지만 그렇기때문에 많은 사람들이 어떠한 방식으로 푸시는것을 선호하시는지 정말 궁금합니다. 본인이 선호하는 방식 혹은 주위에서 본 방식중에는 어떤것이있는지 가르쳐주시면 정말 감사하겠습니다..!! (전략을 노출하시기가 꺼려지신다면 굳이 가르쳐주시지않으셔도됩니다!)

yukariko   9년 전

구종만씨의 "알고리즘 문제 해결 전략" 책에 나와있는 말을 담아보자면..

모호한 변수명과 함수명은 실무에서는 물론이고 대회라고 해도 낙제감이라고 합니다.

용도를 정확히 알 수 있는 변수명과 함수명을 작성하는것이 좋습니다.


sgc109   9년 전

@yukariko 그렇군요! 좀더 변수명에 신경을 써야겠네요 ㅎㅎ

근데 한가지 어려운점이 제가 부여하고자 하는 의미를 정확하게 담고있는, 나중에 봐도 '아 뭐구나' 할만한 영어 단어나 표현을 바로바로 생각해내기가 생각보다 쉽지가않아서

대부분의 경우에는 뭔가좀 찝찝한느낌의 변수명으로(최대한 의미를 표현은 하려고했지만 이 변수명을 딱봤을때 어떤건지 바로 감이 오지않을것같은느낌)

시간을 지체하거나(물론 그렇게긴시간은아니겠지만) 흐름이 끊어질때가 있다는게 좀 불편한것같네요 ㅠㅠ 영어를 공부해야하나..

물론 이것들을 다 감안해도 변수명에 신경을 쓰는것이 훨씬 이득이라고 생각하긴합니다. 그럼 주석에 대해서는 어떻게생각하시는지 궁금합니다 ㅎㅎ



yukariko   9년 전

기본적으로 디버깅을 최대한 자제하고,

소스를 읽는것만으로도 문제점을 캐치해낼수 있어야 한다고 생각합니다.

그런점에서 주석은 소스를 디버깅하지않고 읽어낼 수 있을 정도로만 있으면 되지않을까 싶네요.


sgc109   9년 전

@yukariko 그렇군요

좋은 말씀감사드립니다. 이 사이트는 좋은 실력에 좋은 성격까지 가지고 계신 분들이 많아서 정말 좋네요 감사합니다!

baekjoon   9년 전

저는 문제를 풀 때는 변수명을 거의 한글자만 사용합니다.

무작정 생각나는대로 a, b, c, d, e, f를 사용하는 것이 아니고, 각 알파벳마다 의미를 정해서 몇 년째 쓰고 있습니다.

예를 들어, a는 인접행렬, v는 vector, s는 set, d는 dynamic 또는 map, q는 큐, i, j, k는 for문, n과 m은 개수 등등등

sgc109   9년 전

@baekjoon 오 그것도정말 좋은방법이네요 왠지 처음엔 적응이안돼도 익숙해지면 매우도움이 될것같아요

sgc109   9년 전

@baekjoon

백준님은 그렇다면 전역변수 사용에대해선 어떻게 생각하시나요? 자주 사용하시나요?

개인적으로 전역변수로 사용했을때 좋은점은 함수 인자로 일일이 많은 변수들을 전달해 줄 필요가 없어진다는것이고

안좋은점은 함수의 역할이 명확하게 나눠지지않고 함수안과 함수밖의 영역이 뒤엉키는 느낌이 들면서 어지러워진다는것인데

백준님은 어떻게생각하시나요??? 궁금합니다 ㅎㅎ

baekjoon   9년 전

저는 문제를 정말 빨리 푸는 편입니다.

대전 ICPC에서도 첫 번째 제출+정답을 3번정도 달성했던 것 같고, Topcoder에서도 First Solver를 몇 번 달성했었습니다. 그래서 저는 빨리 푸는것에 익숙해져서 함수도 잘 사용하지 않습니다.

대회 프로그래밍에서 굳이 함수의 역할을 나눌 필요는 없다고 생각합니다. 몇 년동안 쓸 코드도 아니고 디버깅을 오랜 기간동안 할 것도 아니기 때문이지요. 따라서, 전역변수를 많이 사용합니다.

sgc109   9년 전

@baekjoon 정말 빨리풀려면 그렇게 해야하는거였군요..

저는 가끔 코드를 짜다가 뭔가 어지럽고 지저분해보이면 함수로 뽑아내어 알아보기쉽게 만들고싶은 욕구가 자주 생기던데

실전에서 문제를 풀때 빨리 풀고싶다면 적어도 문제를 풀땐 이런습관을 버려야될까요?

baekjoon   9년 전

아니요. 빨리 푸는건 오히려 천천히 푸는 것을 잘 해야합니다.

문제를 읽으면서 솔루션을 생각하고, 코드를 작성하면서 어떤 함수를 어떻게 구현할거고, 언제 무엇을 호출할지를 생각해야하기 때문이죠.

제가 작성한 소스를 보면 이게 빨리 푼건지 천천히 작성한건지 알 수가 없긴 합니다.

천천히 올바르게 코딩을 해야 빨리 푸는 것도 가능하다고 생각합니다.

sgc109   9년 전

@baekjoon 그렇군요.. 좋은말씀감사합니다

댓글을 작성하려면 로그인해야 합니다.