인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

2. 랜선 자르기(결정알고리즘)

이 코드는 안되는 예제가 어떤게 있을까요..

작성

·

35

0

답보다 구한 개수가 더 클 때와 같을 때를 구분해서 코드를 작성하면 정답이 아닌 것도 있는데 왜일까요?! 결국 개수가 같은 것을 찾는 것이니까 맞지 않나요...???

import sys
#sys.stdin = open("00.txt", "r")

k, n = map(int, input().split())
lens = list(int(input()) for _ in range(k))

rt = max(lens)
lt = 0

while rt >= lt:
    temp = (rt+lt)//2
    s = 0
    for i in range(k):
        s += lens[i] // temp
    if s > n:
        lt = temp + 1
    elif s < n:
        rt = temp - 1
    else:
        re = temp
        lt = temp + 1

print(re)

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 코드의 핵심 로직은 랜선을 자르는 최대 길이를 구하는 이진 탐색 방법입니다. 이런 유형의 문제는 주어진 조건(랜선의 개수) 내에서 최적의 해답을 찾아야 하며, 여러 개의 랜선을 잘라서 특정 개수를 만족해야 하는 조건을 충족해야 합니다.

질문에서 언급한 “답보다 구한 개수가 더 클 때와 같을 때를 구분해서 코드를 작성하면 정답이 아닌 것도 있는데 왜일까요?“에 대한 답변으로, 범위 설정에서 일어나는 로직 오류를 지적할 수 있습니다. 특히, if s > n: 절에서, 개수가 더 많을 경우 lt를 업데이트 하는 것은 맞지만, 이 경우에도 최적의 값이 될 수 있으므로, 이 조건에서도 잠재적으로 정답이 될 수 있는 값을 업데이트 해야 할 수 있습니다. 즉, re의 업데이트를 단순히 else: 절에서만 하는 것이 아니라, if s >= n: 조건에서도 고려해야 합니다. 이는 문제의 조건에서 랜선의 개수가 주어진 n과 정확히 일치하거나 n보다 많이 만들 수 있을 때 그 길이가 정답이 될 수 있기 때문입니다.

제시된 코드와 유사한 문제인 “랜선 자르기”에 대한 해설이 포함된 답변 링크는 다음과 같습니다.
- 랜선 자르기(결정알고리즘)에서는 결정알고리즘을 통해 질문자님이 제시한 코드와 유사한 문제에 대한 해결 방식을 제공하고 있습니다.

해당 답변에서는 주어진 랜선의 길이를 이용하여 목표하는 랜선의 개수를 만족할 수 있는 최대 길이를 찾는 과정을 설명하고 있습니다. 또한, 문제 해결 방식에서 중요한 점은 목표 개수 n과 실제로 만들 수 있는 랜선의 개수가 같거나 더 많을 경우, 해당 길이를 기록하고 계속해서 탐색을 진행하여 가능한 최대 길이를 찾는 것입니다.

이 경우의 답변은 질문 내용과 정확히 일치하는 부분을 다루고 있으니, 해당 맥락을 이해하고 코드에 반영하시면 해결하고자 하는 의문에 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기