level2_짝지어 제거하기
2024. 3. 5. 12:07ㆍ파이썬_알고리즘(코딩테스트)/level2


내가 제출한 코드
def solution(s):
answer = []
for i in range(len(s)):
if len(answer) == 0 or answer[-1] != s[i]:
answer.append(s[i])
elif answer[-1] == s[i]:
answer.pop()
if len(answer) >= 1:
return 0
else:
return 1
- 주어진 문자열 s를 순회하면서,
- answer 리스트가 비어 있거나(answer에 아무것도 안들어가있거나) 현재 문자가 answer 리스트의 마지막 문자와 다를 때는(answer 리스트에 마지막 문자가 s[i]랑 다를때는), 현재 문자를 answer 리스트에 추가한다.
- answer 리스트의 마지막 문자가 현재 문자와 같을 경우에는, answer 리스트의 마지막 문자를 삭제한다.
- 마지막으로, answer의 길이가 1보다 크면 남아있는 문자열이 있으므로 1을 반환하고, 길이가 0이면 짝지어져 문자열이 제거되었으므로 0을 반환한다.
다른 사람이 제출한 코드
def solution(s):
temp = ["",s[0]]
for i in s[1:]:
if temp[-1] != i:
temp.append(i)
else:
temp.pop()
return 1 if len(temp) == 1 else 0
나는 range(len(s)) 를 써서 나타냈는데 그냥 슬라이싱해서 for문 만드는게 훨씬 더 코드가 깔끔해보이는거 같다!
temp = ["", s[0]]에서 "" 안쓰고 temp = [s[0]]을쓰면 안되는걸까 고민하다가 코드를 돌려 보았는데
""을 쓴 이유는 마지막 return 값을 ""가 남아있으면 1을 반환하기 위해서 쓴거였다.
'파이썬_알고리즘(코딩테스트) > level2' 카테고리의 다른 글
| level2_가장 가까운 같은 글자 (0) | 2024.03.13 |
|---|---|
| level2_카펫 (0) | 2024.03.07 |
| level2_피보나치 수 (0) | 2024.02.29 |
| level2_다음 큰 숫자 (0) | 2024.02.27 |
| level2_숫자의 표현 (0) | 2024.02.25 |