importamt   5년 전

여러 언어로 문제 푸는 재미로 천천히 문제 풀고있는데

var a = 0에서 에러가 난다면

분명 문제 조건이 잘못된거라고 생각이 드네요.

exqt   5년 전

BOJ에서 nodejs가 메모리를 많이 잡아 먹는데 (얼마전에 푼 문제 메모리가 700mb네요 ㄸ) 

이 문제에는 언어별 추가 시간이 없어서 아무것도 안 해도 메모리 초과가 뜨는거 같아요

메모리를 이렇게 많이 먹을 이유는 없는데 백준님이 원인을 조사해주셨으면 좋겠습니다

jh05013   5년 전

제 메모리 제한을 전체 512MB로 바꿔 달라는 요청을 한 적이 있는데, 그게 언어별 추가 메모리도 없애 달라는 뜻이 아니었는데 잘못 전달되었습니다.

djm03178   5년 전

참고로 이 문제에서는 Node.js를 통과시키지 않는 것이 의도가 아니었지만, 특정 언어로 통과가 불가능하다고 해서 꼭 문제가 잘못되었다고 할 수는 없습니다. 언어마다 특성이 다르고 그에 따른 어느 정도의 보너스를 BOJ에서 부여해주기는 하지만 문제에 따라서는 충분하지 않을 수도 있고, 출제자가 그 모든 언어에 완벽히 맞는 제한을 설정하려고 할 필요도 없기 때문입니다.

importamt   5년 전

저처럼 잘 모르는 사람의 경우엔 문제 풀이가 잘못됐을거라 생각할 수 있으니

NodeJS로 해당문제를 풀 수 없다는 커멘트라도 남겨주신다면 많은 알고리즘 초심자들의 시간을 아낄 수 있지 않을까요.

djm03178   5년 전

그것도 쉬운 일이 아닙니다. BOJ에서 채점 가능한 언어가 64개나 되는데 그 중 Python 계열은 C/C++에 비해 수십~100배 정도 느리다고 평가받기 때문에 3배+2초의 시간 보너스가 있음에도 불구하고 사실상 푸는 것이 불가능한 문제가 일부 있지만, 누군가 마법의 최적화를 통해 뚫어낼 수 있는지 역시도 알 수는 없습니다. 또한 아희, Brain**** 등과 같이 일부러 난해하게 만든 프로그래밍 언어들의 경우는 아예 제출 코드 바이트 수에 걸린다거나 인터프리터의 한계로 못 하는 경우가 생길 수도 있는데, 이 모든 언어에 대해 이론적으로 통과가 가능한지, 아니면 90% 정도 통과하기 어려울 것인지 같은 걸 모든 문제에 대해 일일히 표기하고 있을 수는 없는 것입니다.

또한 Node.js는 문제 풀이에 있어 주류가 아니기 때문에 기본적으로 제한은 C/C++에 맞춰질 수밖에 없습니다. 백준님이 Node.js에 대한 효과적인 메모리 측정 방법을 찾아내지 못하신 게 크기도 하지만, 언어마다 그 특성이 있고 그 특성에 맞추어 문제를 풀 언어를 선택하는 것도 문제 풀이의 일부라고 생각합니다.

importamt   5년 전

"언어마다 그 특성이 있고 그 특성에 맞추어 문제를 풀 언어를 선택하는 것도 문제 풀이의 일부라고 생각합니다."

위 내용에 적합한 예시가 있을까요?

제 생각엔 문제풀이시 C/C++을 사용하는게 거의 항상 옳다고 생각하거든요.

그리고 Python 계열까진 그렇다 쳐도 아희,  Brain****까지 나올 얘기는 아닌거같습니다.

심지어 최적화를 논하지도 않았구요.

그리고

"이 모든 언어에 대해 이론적으로 통과가 가능한지, 아니면 90% 정도 통과하기 어려울 것인지 같은 걸 모든 문제에 대해 일일히 표기하고 있을 수는 없는 것입니다."

확률과 무관하게 이건 nodeJS를 사용하는것만으로도 오답 판정이 되는 문제입니다.

언어 특성을 전부 고려하여 문제를 출제할 필요는 없지만 적어도 '당신의 언어 선택이 오류다'라는 말은 적합하지 않게 들립니다.

입문자라 잘 모르고 뱉는 말일 수 있겠지만 단순히 문제 오류를 지적한 글이니 오해하지 말아주셨으면 감사하겠습니다.

만약 nodeJS를 선택하여 문제를 풀 수 있고 nodeJS 메모리 이슈에 대한 별도 표기가 없다면

이건 문제 오류가 맞습니다.


djm03178   5년 전

BOJ의 특성상 모든 문제에 대해 모든 언어로 풀린다는 보장을 하는 것이 무리이고, 꼭 모든 언어에 대해 풀린다는 보장을 해줘야 할 필요 역시 없기 때문에 꼭 문제의 오류라고 할 수 없다는 생각입니다. 제출할 수 있는 것은 그냥 제출할 수 있는 것이고 그게 꼭 풀 수 있다는 뜻은 아니죠. 그리고 이 문제는 출제자가 원래 그런 언어로도 풀 수 있게 함이 목적이었고 요청이 올바르게 전달되지 않아 발생한 일이니, 곧 고쳐지기를 기다리시면 됩니다.

그리고 "언어마다 그 특성이 있고 그 특성에 맞추어 문제를 풀 언어를 선택하는 것도 문제 풀이의 일부라고 생각합니다." 는 참고로 구글 코드잼에서 가져온 말입니다.

https://code.google.com/codeja...

"Part of the contest is knowing which tool to use for which job, just as in everyday software engineering."

koosaga   5년 전

일반적으로 커뮤니티에서 "문제 오류" 라고 칭하는 경우는, "맞는 풀이가 존재하며", "모든 맞는 풀이가 통과되는" 두 상황 중 하나라도 만족하니 않는 경우를 뜻합니다. 전자가 어긋난 경우는 공식 풀이가 틀린 경우고, 후자가 어긋난 경우는 테스트 데이터나 스페셜 저지가 잘못되어서 맞는 풀이 (본인의 주관에 의하면 맞아야 하지 싶은 풀이가 아니라 정말로 문제에서 요구한 시간/메모리 제한을 BOJ 상황에서 모두 만족시키며 정당한 풀이) 가 통과하지 않는 상황을 뜻합니다. 

위 문제는 당연히 맞는 풀이가 존재합니다. (1번 조건 만족) 또한, 작성자님이 node.js 로 구현하게 되실 어떠한 풀이든 간에 모두 문제에서 요구한 메모리 제한을 지키는 데 실패할 것입니다. 고로 그것들은 모두 틀린 풀이입니다. (2번 조건 만족) 작성자님은 위 글을 통해서 문제에 오류가 있다는 사실을 입증하는 데 실패하셨습니다.

위 "문제 오류" 의 기준이 각각의 언어에 대해서 독립적으로 적용되는 것을 원하실 수도 있겠습니다. 예를 들어, "node.js에서 맞는 풀이가 존재하며" 라고 조건을 강화시키면 문제 오류가 맞고 수정이 필요합니다. 하지만, 이러한 조건을 BOJ가 수용할 가능성은 없습니다. BOJ는 10000개 이상의 문제가 있고, 현재 조건에서도 각 문제에 오류가 있는지 없는지를 체크하는 데 상당한 노력이 듭니다. 각 언어에 대해서 위 기준을 독립적으로 적용시키면 그 노력을 언어 개수만큼 곱해서 해야 할 것입니다. 그 노력은 누가 할까요? 그만큼의 노력을 할 가치가 있는 일일까요? 모든 언어에 대한 풀이가 있음을 보장해 주는 대회들도 있고 (IOI), 이들은 많아야 3개 정도의 언어들만(C++/Java) 지원합니다. 다양한 언어를 지원하는 것은 공짜로 되는 것이 아니고, 특히 성능이 좋지 않은 언어를 사용하신다면, 그러한 언어에 대한 지원은 온라인 저지의 "의무"가 아니라 "서비스" 에 가깝습니다. 문제를 그렇게 많이 풀지 않으셔도, 메모리 700MB를 사용하시는 걸 보셨다면 상식 선에서 내릴 수 있는 결론이라고 생각합니다.

importamt   5년 전

논리적인 답변들 감사합니다

감정적으로 답글 달았는데 친절하게 설명해주셔서 잘 이해했습니다!

무지에서 비롯된 제 글에 기분 상하셨다면 진심으로 사과드립니다.

눈 많이 오니 출퇴근길 조심하시고 좋은 하루 보내세요 

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