티스토리 뷰

-1. 잡담


https://www.acmicpc.net/blog/view/45


 1년 반 전, 질문게시판 답변률이 20%가 안되던 때에 쓰여진 글입니다. 여기서 각 문장의 의도가 무엇인지 하나씩 적어보겠습니다.


 최근에는 대부분의 질문글이 가이드라인을 잘 지켜서 답변하기가 매우 수월합니다. 이런 점은 좋지만, 가이드라인에 맞지 않는 질문이 무시당하는 느낌이 들기도 합니다. PS를 어느정도 한 사람이 보면 가이드라인은 당연한 것들이지만, PS를 갓 시작한 사람들에게는 당연하지 않을 수 있다고 생각합니다.


 제가 질문에 답변할 때는, 질문 내용 뿐만이 아니라, 코드와 질문자의 태도 전체를 확인합니다. 단순히 "시간초과가 납니다"라는 내용이 있고, 시간복잡도에 대해 모르는 것 같다면, 시간복잡도에 대해 공부해보라는 답변을 달게 됩니다. 하드코딩도 너무 과하게 되어 있다 싶으면 더 좋은 방식을 제시하기도 합니다. 질문의 답을 알려주는 것 뿐만이 아닌, 질문자에게 도움이 되는 답변을 하려고 노력하고 있습니다.


("반례를 찾아주세요" 라는 질문글에는 반례만 찾아주는 경우도 있는데, 이 경우에는 반례만을 필요로 한다고 판단했기 때문입니다.) 


 어쨋거나, 1년 반 전에는 질문 가이드라인이 단 하나도 없었고, 답변을 달기 매우 불편했기 때문에, 그때로 돌아가서 하나씩 보겠습니다.



0. 서론


BOJ의 규모가 커지는 만큼 게시판에서 유저들의 질문글도 양이 점점 늘어나고 있습니다.

자신이 짠 코드가 틀린 이유를 알려달라는 질문이 대부분입니다.

하지만 그 중 답글이 달리지 않는 질문도 매우 많습니다. 그 이유를 생각해보면,

  1. 디버깅 자체가 엄청나게 어렵고 힘든 작업입니다.
  2. 다른사람이 짠 코드를 디버깅 해야합니다.
  3. 틀린 것을 알아도, 반례를 찾는 것은 또 다른 문제입니다.

(무작위로 질문글 3개정도만 답변해주고 오시면 느끼실 수 있을 것 같습니다)

이런 의미에서 답변자들은 고통받으면서 댓글을 달고있는 겁니다. 특히 글이 불친절할수록 더더욱...

그래서, 답변자가 원하는 질문글에 대해 말해보려고 합니다.


 "답글 달기가 이렇게 힘듭니다." 하면서 투덜대는 느낌의 서론입니다. 저것을 이해하고 배려하면서 질문글을 쓴다면 더 좋은 답변을 얻을 수 있겠죠.


1. 읽기 쉽게 작성하자.

0) 맞았는데 왜 틀리죠.

하지 맙시다... 틀리니까 틀리죠..

본인이 틀렸다는 것을 인정하지 않으면 디버깅을 할 수 없습니다.

자매품으로 "예제는 나오는데 틀렸다고 나옵니다", "로컬에서는 잘 나오는데 런타임 에러가 납니다" 등이 있습니다.


 맞왜틀 질문은 질문자가 PS를 잘 모르는 것을 의미합니다. PS 문제는 "입력 조건을 만족하는 모든 입력에 대해, 문제에서 제시한 조건을 만족하는 값을 출력해야 한다" 입니다. 현실적으로 모든 입력을 확인하는 것은 불가능하기 때문에 몇 가지만 확인하는 것일 뿐, 모든 입력에 대해 올바른 출력을 내야 하는 것은 변하지 않습니다.


 밑줄 부분은 매우 뛰어난 사람들도 느끼지 않을까 생각합니다. 일단 WA가 나면, 현실을 빠르게 인정하는 것이 필요합니다.


1) 본인 코드가 무슨 알고리즘을 구현한 것인지 설명하자

(코드에 대한 설명이 아니라, 본인이 구현하려고 한 알고리즘을 쓰는 것입니다.)

답변자가 코드를 읽는 것에 대한 가이드라인이라고 생각하시면 됩니다. 없으면 코드를 읽는 데 걸리는 시간이 배로 늘어납니다.

저는 개인적으로 3줄요약 정도면 충분하다고 생각합니다.


 문제 푸는 과정을 크게 2가지로 나누면, "알고리즘 설계"와 "알고리즘을 코드로 구현"이 있습니다. 질문자가 "알고리즘 설계"에서 틀렸는지, 아니면 "코드로 구현"이 제대로 되지 않은 것인지 알아야 제대로 된 답변을 할 수 있습니다. 중간 단계 결과물에 해당하는 "알고리즘"을 설명해달라는 것은 그것 때문입니다.


 없어도 틀린 내용을 찾는데 큰 문제는 없습니다. 다만 답변자가 더 불편하고, 낮은 질의 답변이 달리게 될 것입니다.


2) 어떻게 틀렸는지 쓰자.

"시간초과"인지, "런타임 에러"인지, "틀렸습니다"인지에 따라서 디버깅에 중점을 두는 부분이 다릅니다.

예를 들어, 시간초과면 무한루프와 시간복잡도, 런타임 에러면 배열 인덱싱과 이터레이터 오류,

틀렸습니다면 구현 미스와 알고리즘 정확도 등을 확인합니다.


 예전에는 그냥 못풀겠다고 한 질문글이 많아서 제출현황에 가서 직접 확인을 했습니다. 위에서 적은 것 처럼, 어떻게 틀렸는지에 따라 디버깅 초점이 다릅니다. 초보자들은 잘 모를 수 있을 것 같아서 적었습니다.


3), 4) 코드는 소스코드에 쓰자. 코드 인덴트를 맞추자.

코드를 게시글에 그대로 붙여넣는 경우가 있습니다. 인덴트 깨지고 하이라이트 안되서 하나도 못읽습니다.

boj는 친절하게도 코드를 붙여넣는 곳이 있고(제일 아래), 읽기 편하게 해줄 건 다 해주니 이걸 이용해주세요.


인덴트가 안맞아서 반복문 범위가 잘 안보이는 경우나, 인덴트가 1칸이라던가, 등의 상식을 벗어나는 경우가 있습니다.

가독성을 위해 적어도 에디터에서 자동으로 해 주는 인덴트 정도는 해 줍시다.


지금은 다들 잘 해주셔서 좋은 것 같습니다. 예전에는 그냥 게시글에 복붙해서 망한 질문글도 많았고, 인덴트가 안맞아서 읽는데 고생한 적도 있습니다.


5) 코드는 전체를 다 올리자.

코드의 일부만을 올리시는 경우가 있는데, 일단 다른 부분이 틀릴 수도 있는데다가

실행을 시키지 못하면 사실상 반례찾기랑 디버깅은 못하신다고 보시면 됩니다.


 왜 코드 일부만 올리는 것일까요? 자르기가 더 귀찮을 거 같은데.. 지금은 다들 잘 올려주시는 것 같습니다. 


6) 코드를 깨끗하게 쓰자.

알고리즘 전체를 설명한다고 각 줄에 주석을 다는 것 등은 가독성을 해칠 수 있습니다.

코드 자체는 있는 그대로 올려주세요.


사실 이건 제 취향입니다. 주석 없고 1)에서 말한 알고리즘만 있어도 코드 읽는데 문제가 없습니다. 그리고 질문자의 부담을 줄이려는 것도 한 가지 이유입니다. (변수가 어떤 값을 저장하는지 정도를 주석으로 달면 도움이 됩니다)


 (이 항목을 적은 이유는, 모든 줄에 한글 주석이 빽빽하게 적혀있어서 너무 읽기 힘든 코드를 본 적이 있었기 때문입니다)


2. 답변자를 배려해주세요.

1) 질문을 하기 전에 문제의 다른 질문을 읽어봅시다.


https://www.acmicpc.net/board/search/question/problem/1152

4페이지가 되는 질문글 중에 겹치는 것들이 하나도 없을까요...


(요즘은 설탕배달이 더 인기있습니다.)


 저 글이 쓰였을 당시에는 질문글은 넘쳐났고, 답변자는 없어서, 중복되는 질문을 답변하기에는 질문이 너무 많았습니다. 그래서 가장 필요없는 질문부터 줄여보자고 생각해서 추가했습니다. 다만, "필수는 아니다." 정도의 느낌입니다. 주제부터가 "배려해주세요" 이기도 했고..


 답변자를 배려하는 것 이외에도, 안풀리는 문제의 질문글을 읽는 것은 도움이 됩니다. 1-0)에서 말한, "입력 조건을 만족하는 모든 입력에 대해, 문제에서 제시한 조건을 만족하는 값을 출력해야 한다"라는 개념을 몸으로 체험할 수 있는 기회이고, 다른 사람이 틀린 내용을 배울 수도 있습니다. 혹은, 이렇게 멍청한 사람도 있구나 하면서 안도할수도 있겠고..



2) 답변을 읽었다면 반응을 해 주세요.


필수는 아닙니다만, 답변이 이해가 안되면 이해가 안된다고 댓글로 물어보고, 아니면 좋아요 정도는 눌러줍시다.

저는 적응돼서 반응이 없어도 그러려니 합니다


 관심병 걸린 사람처럼 느껴질 수 있겠지만, 사실 제가 달은 댓글이 제대로 도움이 됐는지 알고 싶어서 추가했습니다. 



3) 질문이 해결된 경우 해결 표시를 해 주세요.


질문을 하고 본인이 해결하는 경우가 있는데, 질문자는 그 사실을 모르기 때문에 답변하느라 쓸모없는 노력을 하는 경우가 있습니다.

또는, 질문이 필요한 글이 어떤 것인지 알 수가 없어 다 열어봐야 하는 귀찮음 같은 것들이 있습니다.


 지금도 별로지만, 이건 BOJ 해결태그 수동화 시스템 문제지 질문자 문제는 아닌 것 같습니다. 그래도..


 요즘도 질문자가 질문을 올린 다음에 혼자 해결하는 경우가 있는데, 제출현황 가서 풀었나 확인하기 너무 귀찮습니다. 확인을 안하면 푼 문제에 또 답글다는 꼴이 돼서 불편하기도 하구요.




 이 글을 작성하면서 가장 중요하게 여긴 것은, "질문자를 불편하게 만들지 않기"였던 것으로 기억합니다. 글을 보면, 약간의 노력으로도 위의 내용을 모두 만족시키는 질문글을 쓸 수 있게 만들었습니다. 


 질문자와 답변자가 서로 배려하면서 질문게시판을 만들어나갔으면 좋겠습니다.

댓글
댓글쓰기 폼
공지사항
Total
39,562
Today
6
Yesterday
23
링크
«   2022/08   »
  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      
글 보관함