강의로 돌아가기
develchoi

Python 질문드립니다

테스트 케이스는 전부 통과하는데 답안 제출 시 모든 케이스에서 '실패'가 뜹니다.
고민을 해봐도 반례가 안 떠오르는데 뭐가 있는지 알려주시면 감사하겠습니다.

def solution(myString):
answer = []
start = 0
end = 0

for word in myString:    
    if word == 'x':
        element = myString[start:end]
        if element == "":
            continue
        else:
            answer.append(element)
        end += 1
        start = end
    else:
        if end == len(myString)-1:
            element = myString[start:]
            answer.append(element)
        else: 
            end += 1


    #문자열 sorting
    answer.sort();

return answer
1 개의 답변
낙방여우

생각해 봅시다.

지금 코드는 x문자를 만나면 slice를 통해 answer에 넣고 있습니다. 그리고 그 과정에서 2가지 경우를 나눠서 처리하고 있죠.

  1. 공백일 경우에는 다음으로 넘어가고 있습니다.
  2. 공백이 아닐 경우에는 answer에 넣고 이후에 end와 start의 값을 조정하고 있습니다.

이 부분에서 논리를 따져보죠. 공백일 경우 그냥 넘어가는 것은 문제에서 공백은 answer에 넣지 말라는 설명이 있었기 때문입니다. 그리고 end와 start의 값을 조정하는 이유는 확인하고 있는 문자, word의 인덱스와 동기화해야 slice가 의도한 대로 동작하기 때문입니다.

그렇다면 end나 start는 각 반복 동작에서 매번 바뀌는 word의 인덱스에 따라 한 번은 조정되어야 하는 값이라는 얘기입니다. 아래 else의 if부분에서는 for문의 마지막 동작을 의도한 것으로 이후에 반복 동작을 하지 않으니 여기에 end나 start의 값을 조정하지 않는 것은 괜찮습니다. 하지만 이후에 반복 동작을 하게 되는 부분에서는 추가적인 제외사항이 아니라면 그런 생략이 있어서는 안 될 겁니다.

그런데 공백이 나오게 될 경우 continue를 통해 다음으로 넘어가면서 end나 start의 값 조정이 이뤄지지 않고 있습니다. 그것이 문제점으로 보입니다.

기본적으로 조건문을 사용할 때는 그 조건에 맞는 상황을 직접 생각해 보고, 동작의 결과가 의도한 대로 나오는지 확인해 보는 것이 좋습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.