국문과 유목민

8. 같은 숫자는 싫어 본문

알고리즘_코딩테스트/프로그래머스_Level1

8. 같은 숫자는 싫어

논곰 2020. 9. 9. 17:03

0. 문제

링크) https://programmers.co.kr/learn/courses/30/lessons/12906

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr


1. 알고리즘 계획

- for문을 돌면서 리스트 앞, 뒤의 값을 확인하면서 돈다.

- 마지막 리스트 항목에서 비교가 안되어, 1~9에 해당되지 않는 값 하나를 추가


2. 나의 코드

def solution(arr):
    arr.append(10)
    answer = [arr[i-1] for i in range(1, len(arr)) if arr[i-1] != arr[i]]
    return answer

- 10이라는 임의의 값을 추가한 게 아쉽다.

3. 다른 사람의 코드

def no_continuous(arr):
    return [arr[i] for i in range(len(arr)) if [arr[i]] != arr[i+1 : i+2]]

- 리스트 슬라이싱을 이용하면 해결 가능

- 내가 아쉬웠던 부분을 해결할 수 있는 코드

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

- 오프셋 인덱스를 사용했음. 빈 리스트에 새로운 수가 나오면 추가하고, 연속일 경우 pass


4. 정리 및 리뷰

- 리스트 오프셋 인덱스로 슬라이싱할 경우에는 범위를 초과해도 괜찮다.

  ※ 대신 type은 '리스트형'이므로 리스트와 비교한다.

- 문제를 완벽하게 못 푼 것 같아서 아쉽지만, 오프셋 인덱스의 사용법을 깨달음

( for문과 다르게 범위를 초과해도 괜찮다.) 


코드 만족도: ★★★☆☆


'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글

10. 두 정수 사이의 합  (0) 2020.09.09
9. 나누어 떨어지는 숫자 배열  (0) 2020.09.09
7. 가운데 글자 가져오기  (0) 2020.09.09
6. 2016년  (0) 2020.09.09
5. K번째 수  (0) 2020.09.09
Comments