코딩테스트

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

SigmoidFunction 2021. 7. 16. 09:56
728x90

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

 

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

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

programmers.co.kr

 

 

1단계 문제! 겁나 쉽다

 

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

 

처음엔 단순하게 생각했다.

 

arr 포문 돌려서 다음값이랑 같으면 안넣고 다르면 넣고

 

예를 들면

for i in arr:
	if i != i+1:
    	answer.append(i)
    else:
    	continue:
    return answer

근데 ㅋㅋㅋㅋ

 

i+1은 말그대로 i에 1을 더하기때문에 arr가 고대로 나왔다.

 

그래서 정공법으로 일단 풀었다.

 

일단 시도해본 형태가 

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

근데 list[-1]은 리스트에서 마지막 값을 나타내기 때문에 리스트 처음과 끝이 같다면 맨앞의 값이 들어가지 않았음

 

 

그럼 처음엔 무조건 답에 들어가게 만들어주면 되지 뭐

 

하고 작성하고 테스트를 모두 통과한 코드가 바로 다음 코드다

 

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

효율성이 구리려나..싶었는데 다행히 100점으로 통과했다.

 

 

 

다른 고수들의 코드를 살펴보자

 

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

answer 속의 인덱스로 판단해버리다니

 

이런이런...대단하구만

728x90