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