
0과 1로만 이루어진 문자열에서 연속해서 붙어있는 0들을 하나의 0으로 줄이려 합니다.
예를 들어 "101100011100" 이란 문자열은 "101101110"으로 만들면 됩니다.
0과 1로만 이루어진 문자열 s가 매개변수로 주어질 때, 연속해서 붙어있는 0들을 하나의 0으로 줄인 문자열을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
0과 1로만 이루어진 문자열 s가 solution 함수의 매개변수로 주어집니다.
연속해서 붙어있는 0들을 하나의 0으로 줄인 문자열을 return 해주세요.
| s | return |
|---|---|
| "101100011100" | "101101110" |
1은 줄이지 않으며, 연속해서 붙어있는 0만 하나의 0으로 줄이면 됩니다.
def solution(s):
s += '#'
answer = ""
for i in range(len(s)):
if s[i] == '0' and s[i + 1] != '0':
answer += '0'
else:
answer += '1'
return answer
#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution함수만 수정하세요.
s = "101100011100"
ret = solution(s)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
이번엔
빈칸 채우기,함수 작성문제가 아니라 코드 오류를 찾는 문제이다.
주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하는 문제이다.
def solution(s):
s += '#'
answer = ""
for i in range(len(s)):
if s[i] == '0' and s[i + 1] != '0':
answer += '0'
elif s[i] == '1': # 수정
answer += '1'
return answer
#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution함수만 수정하세요.
s = "101100011100"
ret = solution(s)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
#를 붙인다.for문을 이용하여 문자열의 인덱스를 0부터 차례로 가져와 현재 인덱스의 문자가 0이고 다음 인덱스의 문자가 0이 아니면 0을 answer에 추가한다.for문을 이용하여 i가 s의 마지막 인덱스 값을 가질 때 s[i+1]를 참조하면, 리스트의 인덱스 범위가 벗어나므로 오류가 발생한다. 따라서 for문의 반복 범위를 정하는 range()를 사용할 때 range(len(s)-1)을 써야 하는데, 문제의 경우 변수 s의 마지막 문자가 항상 #이므로 s[i] == 0이 되지 않기 때문에 and 연산 뒤에 오는 s[i+1] == 0 자체를 실행하지 않아 오류가 발생하지 않았다.1이면 그대로 answer에 추가하도록 조건식을 수정하였다.이전의 코드는 현재 인덱스가 문자가 0이고 다음 인덱스의 문자도 0인 경우에 1이 answer에 추가되는 코드이므로 위와 같이 수정한다.
다만, 해당 문제에서 #을 추가하는 것 보단 range()의 범위를 len(s) - 1 하는 것이 가장 좋다. (코드 논리을 위해)