작성
·
103
0
4,5번이 오류가 뜨는데 원인을 모르겠습니다..
왼쪽, 오른쪽 값 비교해서 증가수열 구하는거는 비슷한거 같은데 말이죠...
n = int(input())
a = list(map(int, input().split()))
tmp = min(a[0], a[-1])
s = smp = '' # 문자열 임시변수, 문자열 중 가장 큰 값 변수
cnt = cntmp = 0 # 길이 임시변수, 길이 중 가장 큰 값 변수
while len(a) > 0:
if tmp <= a[0] and tmp <= a[-1]:
i = a.index(min(a[0], a[-1]))
tmp = a[i]
a.pop(i)
cnt +=1
if i == 0:
s += 'L'
else:
s += 'R'
#print(a, cnt, s, tmp)
elif tmp <= a[0] or tmp <=a[-1]:
i = a.index(max(a[0],a[-1]))
tmp = a[i]
a.pop(i)
cnt+=1
if i== 0:
s +='L'
else:
s+='R'
#print(a, cnt, s, tmp)
else:
if cntmp < cnt:
cntmp = cnt
smp = s
cnt = 0
s = ''
i = a.index(min(a[0],a[-1]))
tmp = a[i]
cnt+=1
if i == 0 or len(a) == 0:
s += 'L'
else:
s+= 'R'
a.pop(i)
#print(a, cnt, s, tmp)
print(cntmp)
print(smp)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
heewon221님, 제공하신 코드는 주어진 리스트에서 증가하는 수열을 만드는 문제로 보입니다. 이 코드에서 4, 5번 테스트케이스에서 오류가 발생하는 이유를 분석해 보겠습니다.
코드는 리스트의 양 끝값을 비교하며, 작은 값을 기반으로 무엇을 추가할지를 결정합니다. 증가수열을 만들기 위해 왼쪽과 오른쪽 끝 값을 비교하고 적절한 대처를 해야 합니다. 하지만 코드의 몇 가지 핵심적인 부분에서 문제가 발생할 수 있습니다.
index
사용에서의 문제점:
index
메서드는 리스트에서 처음으로 일치하는 요소의 인덱스를 반환합니다. 하지만 리스트에서 중복 요소가 있을 때, 의도한 요소가 아닌 다른 반복되는 값의 인덱스를 반환할 수 있습니다. 이는 특히 max
나 min
과 함께 사용할 때 의도치 않은 동작을 유발할 수 있습니다.논리 오류:
else
부분에서, 임시 카운트(cnt
)와 최종 카운트(cntmp
)를 비교하고 나서 다시 수열을 찾기 시작할 때, 이전의 임시 수열(s
)과 카운트(cnt
)를 초기화하지 않고 새롭게 시작하는 것이 적절한지 확인이 필요합니다.초기화 문제:
tmp
, cnt
, s
등이 새롭게 시작할 때 적절히 초기화되지 않아 이전의 값이 남아 있을 가능성이 있습니다.similar 문제를 논의한 기존의 질문과 답변을 참고하시면 도움이 될 것입니다. 예를 들어, 제 코드도 한 번만 확인 부탁드립니다.과 같은 질문에서 다양한 사례와 논의가 이루어졌습니다. 해당 내용에서는 코드의 효율성을 더 향상시킬 수 있는 피드백이 포함되어 있으니 도움이 될 것입니다.
추가적으로 다른 해결 방법도 확인하실 수 있습니다:
- 코드 길이 때문에 질문드립니다.
- 제 코드에 대한 질문입니다.
제가 제시한 설명을 바탕으로 코드를 다시 리뷰하시거나 개선 방향을 시도해보시면 좋을 것 같습니다. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.