TODAY TIL
안녕하세요! 오늘은 배열에서 연속으로 나타나는 숫자를 제거하는 문제를 해결하는 방법을 소개하겠습니다. 이 문제는 배열 arr에 연속으로 나타나는 숫자가 있을 때, 중복된 숫자를 하나만 남기고 제거하여 반환하는 문제입니다. 문제 풀이를 단계별로 설명하겠습니다.
문제 설명
- 배열 arr가 주어집니다.
- 배열의 각 원소는 0부터 9까지의 숫자로 이루어져 있습니다.
- 연속적으로 나타나는 숫자를 하나만 남기고 제거한 배열을 반환합니다.
- 예를 들어:
- arr = [1, 1, 3, 3, 0, 1, 1]이면 [1, 3, 0, 1]을 반환해야 합니다.
- arr = [4, 4, 4, 3, 3]이면 [4, 3]을 반환해야 합니다.
제한사항
- 배열 arr의 크기: 최대 1,000,000
- 배열 arr의 원소: 0 이상 9 이하의 정수
문제 해결 접근법
1. 문제 이해 및 계획
- 주어진 배열을 순회하면서 연속된 숫자가 중복인지 확인하고, 중복이 아니면 결과 배열에 추가합니다.
- 각 숫자를 이전 숫자와 비교하여 중복 여부를 판단합니다.
2. 구현 단계
- 빈 배열 result를 초기화하여 중복되지 않은 숫자를 저장합니다.
- previous 변수로 이전 숫자를 저장합니다.
- arr의 각 원소를 순회하며, previous와 비교해 다를 경우에만 result에 추가합니다.
3. 코드 구현
다음은 문제를 해결하는 Python 코드입니다:
def solution(arr):
result = [] # 결과를 저장할 배열
previous = None # 이전 원소를 저장할 변수
for num in arr:
# 이전 원소와 다를 때만 결과 배열에 추가
if num != previous:
result.append(num)
previous = num # 현재 숫자를 이전 숫자로 갱신
return result
# 테스트 케이스
print(solution([1, 1, 3, 3, 0, 1, 1])) # 출력: [1, 3, 0, 1]
print(solution([4, 4, 4, 3, 3])) # 출력: [4, 3]
4. 코드 설명
- result 배열은 중복이 제거된 숫자들을 저장합니다.
- previous 변수는 이전 숫자를 저장해 연속 중복을 판단합니다.
- arr의 각 숫자를 순회하며 previous와 비교해 다르면 result에 추가하고, previous를 현재 숫자로 갱신합니다.
5. 시간 및 공간 복잡도
- 시간 복잡도: O(n)O(n) — 배열을 한 번 순회하므로 매우 효율적입니다.
- 공간 복잡도: O(n)O(n) — 중복이 제거된 결과 배열을 저장하기 때문입니다.
마무리
이 코드로 연속된 중복 숫자를 손쉽게 제거할 수 있습니다. 배열의 길이가 최대 1,000,000인 경우에도 효율적으로 동작합니다. 문제를 풀면서 알고리즘의 효율성과 Python의 기본 문법을 함께 이해할 수 있는 좋은 예제였습니다.
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 17일차 TIL (7) | 2024.11.14 |
---|---|
99클럽 코테 스터디_4기 16일차 TIL (1) | 2024.11.13 |
99클럽 코테 스터디_4기 14일차 TIL (0) | 2024.11.11 |
99클럽 코테 스터디_4기 13일차 TIL (1) | 2024.11.10 |
99클럽 코테 스터디_4기 12일차 TIL (3) | 2024.11.09 |