[프로그래머스] 같은 숫자는 싫어

유동헌·2021년 10월 2일
0

1일1알고리즘

목록 보기
12/12

링크

https://programmers.co.kr/learn/courses/30/lessons/1290

풀이

def solution(arr):
    
    result = []
    result.append(arr[0])
    
    for i in arr:
        if result[-1] != i:
            result.append(i)
        else:
            continue
        
    return result

print(solution([1,1,3,3,0,1,1]))
  • 연속적으로 나타나는 숫자는 제거!
  • 리스트를 처음 생성할 때 첫 번째 요소를 넣어준다. (이렇게 하지 않으면 인덱싱 에러가 발생!)
  • 반복문을 돌면서, 리스트의 마지막 부분과 추가될 요소가 같은지 검사한다.
  • 연속된 숫자만 걸러내면 되니까 이런 방식으로 풀었다.

풀이 과정

  1. 가장 먼저 not in 구문을 생각했었는데, not in을 하용하면 [1,1,0,1,1] 같은 배열은 답을 구하지 못한다.

다른 분이 푸신 코드인데,

def solution(s):
    a = []
    for i in s:
        if a[-1:] == [i]: continue
        a.append(i)
    return a

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(solution([1,1,3,3,0,1,1]))

print(a[-1:])
print(type(a[-1:]))
print(a[-1])
print(type(a[-1]))

# 
[7]
<class 'list'>
7
<class 'int'>

a[-1:]이 부분을 a[-1]로 처리하면 마찬가지로 list index out of range 에러가 발생한다. 그래서 a[-1:]로 처리를 한 것을 알 수 있다. 이렇게 하면 해당 값이 아니라 해당 값이 리스트에 담겨서 반환된다. 슬라이싱을 사용하면 그대로 슬라이싱되어 리스트로 반환된다고 한다!

def no_continuous(s):
    result = []
    for c in s:
        if (len(result) == 0) or (result[-1] != c):
            result.append(c)
    return result

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( no_continuous( "133303" ))

이 분의 코드도 같은 문제가 발생하는 코드인데, (len(result) == 0) 부분을 추가하여 해결하셨다.

정리

  1. 가장 먼저 코드를 어떻게 논리적으로 구현할까, 이렇게 생각했는데 막상 리스트 인덱싱으로 문제가 풀렸다. 실력은 부족한 상태에서 코드 전개에 대한 강박이 있다보니..자료형을 먼저 생각하고 그 다음에 자료구조를 생각하는 방향으로 풀이를 전개해야 할 것 같다. 아직까지 1단계도 쉽지가 않은데, 2단계 풀기 전까지 꾸준히 공부해야하겠다.
profile
지뢰찾기 개발자

0개의 댓글