djm03178   25일 전

알고리즘을 잘 하고 싶은 여러분이 질문 게시판에 질문을 올리기 전에 꼭 알아두셨으면 하는 것들을 모아봤습니다.

읽으면 좋은 글들

  • 질문 게시판 공지사항 https://www.acmicpc.net/board/... : 질문을 올릴 시 기본적으로 지켜야 할 사항들과 각종 채점 결과에 대한 일반적인 이유가 잘 설명되어 있습니다. 정말 여러 번 강조해도 지나치지 않습니다. 꼭 정독하세요. 읽었습니다 댓글은 안 남겨도 됩니다 알림이 오거든요
  • BOJ 101 https://www.acmicpc.net/blog/v... : 백준 온라인 저지가 어떻게 동작하는지에 대한 친절한 설명이 적혀 있습니다.
  • 자주 틀리는 요인 https://www.acmicpc.net/blog/v... : 위의 BOJ 101 글에도 걸려있는 링크로, 자주 틀리는 요인들을 정리한 글입니다. 올라오는 질문의 90%는 이 중에 해당사항이 있다고 봐도 무방할 정도로 잘 정리되어 있습니다.
  • ❌ ~~에서는 잘 되는데 ❌ https://www.acmicpc.net/board/... : 틀린 건 내 코드입니다. 채점 프로그램이나 컴파일러에게는 아무 잘못이 없습니다.
  • 도움이 필요한 당신에게 https://www.acmicpc.net/blog/v...
  • 채점 도움말 https://www.acmicpc.net/help/j...
  • 언어별 도움말 https://www.acmicpc.net/help/l... : 언어에 따라서는 시간 및 메모리 보너스가 있는 경우가 있습니다.
  • 질문글을 지우지 말아주세요. https://www.acmicpc.net/board/...

질문을 올리기 전에

여기에 서술할 내용 대다수는 위의 링크들에 이미 언급된 내용이지만, 특히 중요하다고 생각하는 것, 또 제가 개인적으로 부탁드리고 싶은 것들을 중심으로 다시 쓰겠습니다.

  • ★☆★☆★ 질문 검색을 통해 기존 질문들을 봅시다. ★☆★☆★ 질문 검색이란, 문제 페이지의 상단에 있는 여러 탭들 중 가장 오른쪽에 있는 "질문 검색" 탭을 말합니다. 여기에 가면 해당 문제에 대한 다른 사람들의 질문을 볼 수 있습니다. 내가 겪고 있는 문제는 다른 사람들 역시 똑같이 겪었을 확률이 매우 높습니다. 답변 글 자체가 내 코드의 문제점을 지적하고 있을 수도 있고, 문제의 원인은 다르더라도 답변에 달린 반례가 우연히도 내 코드의 반례가 될 수도 있습니다.
  • FAQ 글은 꼭 읽어보세요. 질문자 수가 많은 문제들의 경우 대부분 저와 @jh05013 님이 작성한 FAQ 글이 질문 게시판에 있습니다. 올라오는 질문의 약 90%는 FAQ 글에서 원인이 나옵니다.
  • 예제만 넣어보고 잘 돌아간다고 생각하지 마세요. 예제는 말 그대로 예제입니다. 실제 채점 서버에는 우리에게 공개되지 않는 수많은 입력 데이터가 있고, 이 모두를 통과해야만 정답을 받습니다. 꼭 '틀렸습니다'가 아니라 '런타임 에러', '시간 초과' 등도 마찬가지입니다. 로컬에서는 런타임 에러가 안 나는데 제출하면 런타임 에러가 나는 것이 아니고, 런타임 에러가 날 만한 입력을 로컬에서 안 넣어보았기 때문에 안 났을 뿐입니다. 로컬에서는 답이 바로 나오는데 제출하면 시간 초과가 나는 것이 아니고, 시간 초과가 날 만한 입력을 로컬에서 안 넣어보았기 때문에 답이 바로 나왔을 뿐입니다. (물론 정말로 안 날 수도 있지만, 똑같은 조건으로 실험을 해보지도 않고서 알 수는 없습니다.)
  • 다양한 입력을 스스로 만들어 보세요. 반례를 직접 만들어보는 것도 연습이 필요합니다. 예제가 나왔는데 틀렸다고 곧바로 질문하려 하지 말고, 스스로 반례를 찾아보고 틀린 이유를 분석하고 디버깅하는 과정을 끊임없이 거쳐야 실력 향상에 도움이 됩니다.
  • 어떤 문제든 질문을 올리기 전 최소 30분은 고민해봅시다. 틀린 원인을 찾는 건 프로그래밍을 하는 데에 있어 매우 중요한 일이고 스스로 디버깅하는 데에 30분은 결코 긴 시간이 아닙니다.
  • 입력 형식을 그대로 지켜서 테스트 하세요. 예를 들면 두 수가 한 줄에 주어지는데 두 줄에 걸쳐서 입력받도록 한다든가, 숫자들 사이에 띄어쓰기가 없는데 띄어쓰기를 기준으로 입력받는 함수를 사용한다든가 하면 당연히 안 됩니다. 예제 옆에 '복사' 버튼이 괜히 있는 게 아닙니다.
  • 컴파일 에러는 "컴파일 에러"라고 쓰인 곳을 클릭하면 에러 메시지를 볼 수 있습니다.

질문 작성 시

  • 카테고리는 '질문'으로 설정하고, 문제 번호는 문제 번호를 적는 칸에 꼭 적읍시다. 문제 번호는 다른 사람들이 이 질문이 어떤 문제에 대한 질문인지 바로 확인하고 찾아갈 수 있는 링크를 제공해 줍니다.
  • 코드는 코드 올리는 칸에 넣읍시다. 글 본문에 코드를 넣으면 매우 가독성이 떨어집니다. 아래에 코드 올리는 칸이 따로 마련되어 있으니 반드시 코드 올리는 칸에 코드를 올립시다.
  • 반드시 틀린 코드 그대로를 한 자도 다름없이 올립시다. 로컬에서 테스트한 코드가 아니라, 제출했던 코드 그대로를 말하는 것입니다. 제출한 코드는 '내 소스' 탭에서 언어 이름을 클릭하면 볼 수 있으니 반드시 그 코드 그대로를 복사합시다. 한 글자라도 다른 코드를 올리면 제출 시 받았던 채점 결과와 전혀 다른 결과를 받을 수도 있고, 엉뚱한 곳에서 다른 오류가 생길 수도 있습니다. 심지어 틀린 부분을 고쳐서 맞는 코드를 만들어놓고도 제출을 안 해보고 질문을 올리는 경우도 심심찮게 보입니다. 꼭 마지막에 제출했던 코드 그대로를 올려주세요. 또한 코드는 반드시 전체를 올려야 다른 사람들도 복사해서 직접 테스트 해볼 수 있을 뿐 아니라, 부분적으로 올린 코드가 아닌 다른 곳이 문제의 원인일 수도 있기 때문에 아무리 상관이 없어 보여도 꼭 전체를 올려야 합니다.
  • 어떤 채점 결과를 받았는지 정확하게 적읍시다. 예를 들어 '틀렸습니다'를 받았다면 '틀렸습니다'를 받았다고 적어야지, '에러가 납니다'나 '멈춥니다', '안 됩니다'와 같은 모호한 표현을 쓰면 그 코드의 채점 결과를 알아내기 위해 답변자가 다시 제출해봐야 하는 번거로움이 생깁니다.
  • 코드에 대한 설명을 적읍시다. 다른 사람의 코드를 읽는 것은 매우 매우 매우 매우 어려운 일입니다. 설명이 없는 코드는 다른 사람이 보기엔 외계어에 가깝습니다. 하나부터 열까지 길게 설명하라는 뜻이 아닙니다. 내가 어떤 로직을 가지고 문제를 해결하려 했고, 그래서 어떤 코드를 통해 어떤 동작을 의도했으며, 어떤 변수가 어떤 역할을 하는지 정도만 간략하게 적으면 됩니다.
  • 불필요한 말들은 적지 않아도 됩니다. 대표적인 예시로,
    • "C언어 공부를 막 시작한 코린이입니다. 비주얼 스튜디오에서는 잘 돌아가는데 제출만 하면 5%에서 틀렸다고 나옵니다. 질문 게시판에 있는 반례 다 해봤고 임의로 만든 입력도 다 잘 나오는데 대체 왜 틀렸다고 나오는지 이유를 도통 모르겠습니다... 이틀째 이 문제만 붙들고 있습니다ㅠㅠ 제발 한 번만 도와주세요!"
    • 내용이 길기만 하고 정작 답변자에게 힌트가 될 만한 내용은 하나도 담겨있지 않습니다.
  • 코드가 깨지지 않게 조심합시다. 간혹 올라오는 질문들 중 코드의 인덴트가 깨지고 꺾쇠괄호 <> 부분이 잘리는 경우가 보입니다. 에디터의 버그로 보이는데, 질문을 올릴 때 이런 상태가 되지 않았는지 한 번만 다시 확인해봅시다.

질문 작성 후

  • 이어지는 질문은 답글로 이어서 합시다. 같은 문제의 같은 코드에 대한 질문글을 굳이 중복으로 만들 필요도 없고, 하나의 글에서 이어서 하는 편이 보는 사람도 질문의 맥락을 이해하기 쉽습니다.
  • 해결된 질문에는 '해결됨' 표시를 답시다. 특히, 답변을 받지 않고 스스로 해결한 경우에 아무런 표시가 없으면 다른 사람이 이미 해결된 질문에 열심히 답변을 다는 수고를 하게 될 수도 있습니다. 질문의 상단에 있는 '해결 됨으로 바꾸기' 버튼을 클릭해서 달 수 있습니다.
  • 답변자에게 감사를 표시합시다. 질문 게시판에 답변을 다는 사람들은 모두 자발적으로 시간을 내어 무보수로 도움을 주는 사람들입니다. 답변에 '좋아요'를 누르는 것으로도 충분하지만, 짤막한 감사 인사 한 마디는 그들이 계속해서 질문 게시판에서 활동을 하는 원동력이 됩니다.

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