C개보다 많이 설치해서 나올 수 있는 답이 x라면 C개만 설치해서 x보다 더 나쁘지는 않은 답을 항상 구할 수 있습니다. 그러니까 이분 탐색이 되는 것입니다.
2110번 - 공유기 설치
그런데, 위의 에러코드와 별개로 제가 지적한 건 문제의 표현이 애매하다라는 것입니다. 다시 얘기하자면,
예외가 발생하는 경우또한 처음에 지정한 c보다 그 이상이되는 부분에서 발생한 것 아니겠습니다(Green55님이 지적해주신)
그러니까 "c개를 설치해서" 라는 표현을 "c개 이상을 설치해서"라는 표현으로 바꾸어야 문제의 정확성이 올라갈 거 같다는 얘기입니다. 문제자체에는 그 어디에도 c개이상을 설치해서 나온 값이 답이 될수 있는 표현이 없습니다.
유추된 사실이지, 질문자체에는 존재하지 않는 표현입니다. 무엇보다도 결국 문제 자체에 나온표현은 "C개의 공유기를 설치해서~~"라고 나왔기 때문에(C개로 확정지었기 때문에)질문을 하게 되었습니다.
다시 말하자면, "C개의 공유기를 " 이라는 표현대신 "C개 이상의 공유기를"이라는 표현으로 바꾸어야 한다는게 저의 주장입니다
답변을 잘못 이해하신 것 같습니다. 한 문장으로 정리해서 말씀드리자면, "C개 설치헀을 때의 답"과 "C개 이상을 설치했을 때의 답"이 같습니다. 그러므로 지문을 C개로 하든, C개 이상으로 하든 아무런 지장이 없고, 지문을 바꾸어야만 할 정당한 이유도 되지 않습니다.
좀 더 구체적인 예시를 들어서 설명드리자면, 지문을 "C개 이상"으로 바꾸어서 풀었을 때 C+1개를 설치해서 x개를 구하는 것이 답이라고 구했다고 합시다. 그러면 무조건 C개를 설치하게 했을 때의 답은 무엇일까요? 정답은 x입니다. 그 이유는 C+1개를 설치했을 때의 최적의 답이 C개를 설치했을 때의 최적의 답보다 좋을 수가 없기 때문입니다. 그러므로 "C개"로 하든, "C개 이상"으로 하든 어떤 입력에 대해서도 항상 같은 답이 도출될 수밖에 없다는 것이고, 따라서 지문을 바꿔야 할 이유도 전혀 없다고 말씀드리는 것입니다.
1. 두 분이 공통으로 지적하신 것은 "C개 이상의 공유기를 설치했을 때 최대 거리"와 "C개의 공유기를 설치했을 때 최대 거리"가 같다"라는 것인데, 결과가 같다고 두 표현이 지니는 포함관계가 같은 건 아닙니다. 'C개' 와 'C개 이상' 이 가지는 언어적인 범위의 차이는 두 분다 아실거라 생각됩니다.
2. djm03178님이 지속적으로 언급하고 있는 부분은 무슨 의미인지 파악하고 있습니다. 하지만 위의 4 3 '/n' 1 4 7 10을 예로 들어보면 c=3인데 결국 4개설치했을 때가 최적의 답이 되지 않습니까! 그렇기 때문에 c개 이상을 바꾸어야 합니다
3. 저의 주장은 "c개"를 설치했을때, 도출되는 답이 사실은 "c개이상"을 설치했을때를 의미한다는 것입니다.
4. 그리고 c개이상일 때와 c개일때의 답은 같아서는 안됩니다. 논리적으로 c개이상일때는 c개를 포함하고도 기타의 영역이 존재하기때문입니다. 즉, 두분이서 생각하고 있는 c개는 사실, c개이상을 의미하고 있는 것입니다. 이 부분에 대해서 djm03178님은 c개이상이라하더라도 결국 c개일때가 최적의 답이다 라고 주장하시는것인데,(저도 그렇게 생각했습니다) 그런데 green님이 들어주신 반례가 그게 아니라는 것을 보여주고 있는 것같습니다.(c개를 제외한 c개 이상인 경우가 답이 되는 case)
djm03178님의 주장이 맞다면 결국, 모든 경우는 count == c인 경우에 수렴해야 하는데, 그게 아니므로 오류가 나고 있는 것같습니다 //물론, 제 코드가 잘못작성되었다면 별개의 문제지만...
무턱대고 글을 쓰는것이 아님을 언급하고 싶습니다. 두 분께서 생각하시는 "c개"는 사실은 "c개 이상"을 의미하고 있는 것입니다.
+djm03178님이 마지막에 주장하신 "c개를 설치하는 모든 경우"는 사실은 "c개 이상을 설치하는 모든 경우"입니다. 그러므로 c개이상이 맞는 표현인 것 같습니다
PS. 혹시 여유가 되신다면 두분이 작성한 코드를 보여주실수 있으시겠습니까! 보여주신다면, 얘기가 길어지지 않을 것 같습니다.
"하지만 위의 4 3 '/n' 1 4 7 10을 예로 들어보면 c=3인데 결국 4개설치했을 때가 최적의 답이 되지 않습니까! 그렇기 때문에 c개 이상을 바꾸어야 합니다"
이 부분이 틀렸다는 것입니다. 왜 4개를 놓을 때가 최적의 답인가요? 3개를 놓아도, 4개를 놓아도 가장 인접한 공유기 사이의 최대 거리는 3으로 만드는 것이 최적입니다.
이렇게 되지 않는 반례를 하나 찾아내신다면 C개 이상으로 하는 것이 맞겠지만, 저는 이미 왜 C개일 때의 답을 구하는 코드가 C개 이상일 때의 답을 구하는 문제에서도 답을 내는지를 설명드렸습니다.
이 문제는 "정확히 c개"를 설치하는 문제입니다. 이렇게 구한 최적해를 A라고 합시다. 한편, 질문자님은 "c개 이상"을 설치하셨습니다. 이렇게 구한 최적해를 B라고 합시다. 그러면,
1. B를 출력하면 정답을 받습니다.
2. A와 B는 같습니다.
3. 따라서 A를 출력하면 정답을 받습니다.
3번이 이해되지 않으신다면 https://www.acmicpc.net/blog/v... 을 읽어보시기 바랍니다.
댓글을 작성하려면 로그인해야 합니다.
sls666 4년 전
문제에서는 "c개"의 공유기 설치 라고 하는데, 정답은 "c개이상"의 공유기 설치가 가능한 경우에 정답으로 인정 되는 거 같습니다
문제에서는 주어진 c개를 설치할때 인접한 최대거리를 구하는 것이지 c개이상 가능한 설치중에서 인접한 최대거리를 구하는 것이 아닙니다..