728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12906
내 풀이
def solution(arr):
# answer의 초기값을 arr의 첫 번째 값으로
answer = [arr[0]]
for i in range(len(arr)):
# arr 원소와 answer의 직전 값이 같지 않으면 arr 원소 삽입
if arr[i] != answer[-1]:
answer.append(arr[i])
return answer
간단하게 set을 쓰면 될 것 같지만, set을 사용하면 안된다.
set은 본래 리스트의 순서 보장이 되지 않기 때문이다.
또한, 단순히 중복만을 제거하면 안된다.
왜냐하면 연속적으로 나타나는 숫자만 제거하는 것이기 때문이다.
즉, [1, 1, 3, 3, 0, 1, 1]을 단순히 중복제거하면 [1, 3, 0]이 되지만,
우리가 원하는 값은 [1, 3, 0, 1] 이다.
먼저, answer 배열의 초기값을 arr의 첫 번째 값으로 초기화한다.
이 후, answer 배열의 가장 마지막 값과 현재의 arr 배열의 원소 값이 같지 않으면 answer 배열에 arr 원소를 새롭게 삽입한다.
arr 배열의 크기가 1,000,000 이하이기 때문에 시간 초과가 날 수도 있지 않을까 고려했지만,
다행히 시간 초과는 나지 않았다!
다른 사람 풀이
def solution(arr):
answer = []
for i in arr:
if answer[-1:] == [i]: continue
answer.append(i)
return answer
answer[-1:]을 새롭게 알게 되었다.
이는 값이 없어도 비교가 가능하다.
list[-1:]은 빈 리스트로 처리가 되기 때문에, 값을 비교하는 것에 문제가 없다!
list[-1:]은 마지막 위치의 데이터부터(포함) 마지막까지라는 의미로, 마지막 데이터만을 의미한다.
my_list = [1, 2, 3, 4]
print(my_list[-1:]) # 출력: [4]
empty_list = []
print(empty_list[-1:]) # 출력: []
# 빈 리스트의 경우
empty_list = []
print(empty_list[-1:] == []) # 출력: True
# 값이 있는 리스트의 경우
my_list = [1, 2, 3, 4]
print(my_list[-1:] == [4]) # 출력: True
print(my_list[-1:] == [3]) # 출력: False
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 1 예산 (0) | 2024.08.07 |
---|---|
[프로그래머스][PYTHON] Lv. 1 햄버거 만들기 (0) | 2024.08.06 |
[프로그래머스][PYTHON] Lv. 1 행렬의 덧셈 (0) | 2024.08.05 |
[프로그래머스][PYTHON] Lv. 1 정수 제곱근 판별 (0) | 2024.08.05 |
[프로그래머스][PYTHON] Lv. 1 대충 만든 자판 (0) | 2024.08.05 |