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

김멉덥·2023년 7월 17일
0

알고리즘 공부

목록 보기
51/171
post-thumbnail
post-custom-banner

문제

프로그래머스 코딩테스트 고득점 Kit - 스택/큐


코드 구현

def solution(arr):
    answer = []

    for i in range(len(arr) - 1):
        if (arr[i] != arr[i + 1]):  # 앞 뒤 값이 다르면
            answer.append(arr[i])   # 맨 앞의 값을 넣어주고

    answer.append(arr[-1])  # 마지막에 비교 못한 요소를 추가로 넣어준다
    return answer

풀이

풀이 및 해설

  • 스택/큐 문제이지만 다소 자료구조스럽게 풀지 못한 것 같다. . . ㅎ
  • 리스트에서 앞 뒤 값을 비교한 뒤 → 만약 값이 다르다면 → 앞의 값을 우선 넣는다 → for문을 다 돌고 마지막에 비교 못한 요소를 추가로 넣어준다.

ex. [1,1,3,3,0,1,1]

0인덱스 1인덱스 비교 → 같음 → 넘어감
1인덱스 2인덱스 비교 → 다름 → 1인덱스에 있는 1을 넣음
2인덱스 3인덱스 비교 → 같음 → 넘어감
3인덱스 4인덱스 비교 → 다름 → 3인덱스에 있는 3을 넣음
4인덱스 5인덱스 비교 → 다름 → 4인덱스에 있는 0을 넣음

⇒ for문이 len(arr) - 1만큼 돌아서 현재 끝남, 따라서 현재의 answer 상태 = [1, 3, 0]

마지막에 있는 1을 비교하지 못했다 → 맨 마지막 인덱스 값을 넣어준다.

  • 우선 테스트는 다 통과했기에 수정하지 않았지만, 만약 수정한다면 마지막 인덱스 값을 넣기 전에 현재 answer에 들어있는 값 중 맨 뒤에 있는 값이랑 같은지 비교해보고 넣어줘야 할 것 같다.

What I learned

좋은 코드라고 생각되는 정답

def no_continuous(s):
    result = []

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

    return result

▶️ list에 요소 넣기 함수 정리

참고 : https://ooyoung.tistory.com/117

스택/큐 자료구조를 위해서는 알아둬야 할 것 같아서 정리하였다.

append() : 하나의 객체로 추가됨

>>> nums = [1, 2, 3]
>>> nums.append(4)
[1, 2, 3, 4]

>>> nums.append([5, 6])
[1, 2, 3, 4, [5, 6]] # 리스트가 하나의 객체로 추가되었음

extend() : 배열 끝에 추가됨

>>> nums = [1, 2, 3]
>>> nums.extend([4, 5])
[1, 2, 3, 4, 5]  #리스트로 주어진 [4, 5]의 요소가 각각 추가 되었음

>>> a = [10]
>>> nums.extend(a) 
[1, 2, 3, 4, 5, 10]

insert() : insert(위치, 요소) 로 해당 위치 앞에 요소 추가 가능

>>> nums = [1, 2, 3]
>>> nums.insert(0, [10, 20])  # 0번째(맨앞에) 추가
[[10, 20], 1, 2, 3]

>>> nums.insert(-1, 100)  # 끝에서 1번째 전에 추가
>>> print(nums)
[[10, 20], 1, 2, 100, 3]  # 리스트 맨 끝에 저장되지 않음

>>> nums = [1, 2, 3]
>>> nums.insert(len(nums), 100)
[1, 2, 3, 100]      # array 맨 끝에 추가됨
profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기