-
[프로그래머스] Lv1. 같은 숫자는 싫어Share/Pyhton 2021. 4. 8. 16:09
문제 설명
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
- arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
- arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
입출력 예
arr answer
[1,1,3,3,0,1,1] [1,3,0,1] [4,4,4,3,3] [4,3] 입출력 예 설명
입출력 예 #1,2
문제의 예시와 같습니다.나의 생각
for 문 if 등 조건 과 반복으로 가능할 듯하다.
- tmp 리스트에다가 일단 매개변수로 받은 리스트의 첫 요소 값을 바로 넣고
- tmp의 값이 곧 arr[i] 이니깐 그 전 값 arr[i-1] 과 비교한다
- 값이 다르면 현재 요소 i 의 값을 또 tmp에 append 한다.
다르게 생각해본 것은
arr[i] 와 arr[i+1] 을 비교하게 되면 어떨까 ?
결론은, 같은 숫자가 3번이상 반복, ( 3, 3, 3) 이럴경우에 i+1, i+2 번째 수도 또 비교해야되서
조건이 길어 질 수가 있고, tmp 라는 리스트에 새로 append 할 경우에 또 비교를 해야되는 로직이 추가로 생길 것 같아다.
현재 i 요소의 값과 이전 요소의 값 (i-1)을 비교하면 훨씬 간단하게 해결 된다.
왜냐하면 i-1은 이미 tmp 리스트에 추가가 되었기떄문에 비교할 경우의 수를 줄일수 있다. (숫자가 같을경우에)
즉 핵심은 같은 것을 찾아서 새로운 리스트에 넣자 보다는
일단 새로운 리스트에 넣고 같지 않은 수만 리스트에 추가하자 라는 개념으로 접근하면 좋다.
작성한 코드
def solution(arr): tmp =[] for i in range(len(arr)): print("start i ",i) if i == 0: tmp.append(arr[i]) elif arr[i] != arr[i-1]: tmp.append(arr[i]) print(tmp)
Most 1
def no_continuous(s): a = [] for i in s: if a[-1:] == [i]: continue a.append(i) return a
이런방법도 있다네..
list_a = [1,3,2,3,5,3,4,4,5] list_b = list(set(list_a)) print(list_b) >>[1,2,3,4,5]
출처: https://wooaoe.tistory.com/68 [개발개발 울었다]'Share > Pyhton' 카테고리의 다른 글
[프로그래머스] Lv1. 문자열 내 마음대로 정렬하기 (0) 2021.04.15 [프로그래머스] Lv1. 문자열 내 p와 y의 개수 (0) 2021.04.15 [프로그래머스] Lv1.3진법 뒤집기 (0) 2021.04.13 [프로그래머스] Lv1. 모의고사 , Python (0) 2021.04.09 [프로그래머스] Lv1. 완주하지 못한 선수 (0) 2021.04.07