[Programmers/Level 1] 같은 숫자는 싫어

2020. 6. 15. 17:59코딩테스트 준비/Programmers

 

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

 

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

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

programmers.co.kr

1차 시도

def solution(arr):
    for i in range(len(arr)-2,-1,-1):
        if arr[i] == arr[i+1]: del(arr[i]) 
    return arr
더보기

채점을 시작합니다.

정확성 테스트

테스트 1 통과 (0.04ms, 10.7MB)
테스트 2 통과 (0.05ms, 10.7MB)
테스트 3 통과 (0.05ms, 10.7MB)
테스트 4 통과 (0.05ms, 10.7MB)
테스트 5 통과 (0.05ms, 10.7MB)
테스트 6 통과 (0.05ms, 10.7MB)
테스트 7 통과 (0.05ms, 10.7MB)
테스트 8 통과 (0.04ms, 10.7MB)
테스트 9 통과 (0.05ms, 10.6MB)
테스트 10 통과 (0.05ms, 10.7MB)
테스트 11 통과 (0.07ms, 10.7MB)
테스트 12 통과 (0.05ms, 10.8MB)
테스트 13 통과 (0.05ms, 10.7MB)
테스트 14 통과 (0.05ms, 10.7MB)
테스트 15 통과 (0.05ms, 10.8MB)
테스트 16 통과 (0.05ms, 10.7MB)
테스트 17 통과 (0.04ms, 10.8MB)

효율성 테스트

테스트 1 실패 (시간 초과)
테스트 2 실패 (시간 초과)
테스트 3 실패 (시간 초과)
테스트 4 실패 (시간 초과)

채점 결과

정확성: 71.9

효율성: 0.0

합계: 71.9 / 100.0

 

이건 효율이 개똥같나보다

 

2차 시도

def solution(arr):
    answer = []
    for i in range(len(arr)):
        if [arr[i]] != arr[i+1:i+2]: answer.append(arr[i])
    return answer
더보기

정확성 테스트

테스트 1 통과 (0.04ms, 10.6MB)
테스트 2 통과 (0.06ms, 10.7MB)
테스트 3 통과 (0.06ms, 10.7MB)
테스트 4 통과 (0.06ms, 10.7MB)
테스트 5 통과 (0.06ms, 10.7MB)
테스트 6 통과 (0.06ms, 10.7MB)
테스트 7 통과 (0.06ms, 10.7MB)
테스트 8 통과 (0.06ms, 10.6MB)
테스트 9 통과 (0.06ms, 10.8MB)
테스트 10 통과 (0.09ms, 10.6MB)
테스트 11 통과 (0.06ms, 10.7MB)
테스트 12 통과 (0.05ms, 10.8MB)
테스트 13 통과 (0.06ms, 10.7MB)
테스트 14 통과 (0.06ms, 10.7MB)
테스트 15 통과 (0.06ms, 10.8MB)
테스트 16 통과 (0.06ms, 10.8MB)
테스트 17 통과 (0.04ms, 10.7MB)

효율성 테스트

테스트 1 통과 (217.56ms, 997MB)
테스트 2 통과 (217.02ms, 996MB)
테스트 3 통과 (217.07ms, 997MB)
테스트 4 통과 (217.76ms, 995MB)

채점 결과

정확성: 71.9

효율성: 28.1

합계: 100.0 / 100.0

 

왜 del로 지우는것보다 하나씩 새로 넣는게 더 효율적인건지 알아봐야겠다

 

 


알게된 것

arr[i] != arr[i+1]로 하면 index out of range 에러가 뜨지만 [arr[i]] != arr[i+1:i+2]로 하면 양 옆 모두 리스트고, 범위 넘어가면 걍 빈리스트기 때문에 에러가 뜨지 않는다!

 

 


 

다른 분 코드

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

a[-1:] -> a의 마지막 원소

즉 최근에 넣은 원소와 지금 for문 돌고있는 배열의 원소가 같은지 비교하는 것.

밑의 테스트 결과를 보면 알 수 있지만 이게 더 효율이 좋다.. 근데 정확성 테스트는 내거가 더 빠르다 무슨차이징

 

더보기

정확성 테스트

테스트 1 통과 (0.05ms, 10.8MB)
테스트 2 통과 (0.05ms, 10.8MB)
테스트 3 통과 (0.06ms, 10.7MB)
테스트 4 통과 (0.05ms, 10.7MB)
테스트 5 통과 (0.05ms, 10.8MB)
테스트 6 통과 (0.05ms, 10.8MB)
테스트 7 통과 (0.05ms, 10.7MB)
테스트 8 통과 (0.05ms, 10.7MB)
테스트 9 통과 (0.06ms, 10.8MB)
테스트 10 통과 (0.05ms, 10.8MB)
테스트 11 통과 (0.05ms, 10.7MB)
테스트 12 통과 (0.05ms, 10.8MB)
테스트 13 통과 (0.05ms, 10.6MB)
테스트 14 통과 (0.05ms, 10.8MB)
테스트 15 통과 (0.05ms, 10.7MB)
테스트 16 통과 (0.06ms, 10.9MB)
테스트 17 통과 (0.04ms, 10.7MB)

효율성 테스트

테스트 1 통과 (145.59ms, 996MB)
테스트 2 통과 (145.47ms, 997MB)
테스트 3 통과 (145.60ms, 997MB)
테스트 4 통과 (137.83ms, 997MB)

채점 결과

정확성: 71.9

효율성: 28.1

합계: 100.0 / 100.0