-
[Programmers] 같은 숫자는 싫어programing/Algorithm 2020. 12. 19. 18:39
같은 숫자는 싫어
연습 문제
python3
def solution(arr): i = 0 l = len(arr) while i < l: j = i + 1 last = i # 동일한 숫자가 어디까지 연속되는지 구한다 while j < l and arr[i] == arr[j]: last = j j += 1 # 연속된 개수만큼 제거 for k in range(last - i): del arr[i] # 다음을 위해 인덱스 및 길이 보정 i += 1 l = len(arr) return arr
처음에는 시간을 고려해서 다음과 같은 로직으로 문제를 풀었다.
1. 첫번째 숫자를 선택한다
2. 해당 숫자와 동일한 숫자가 연속으로 존재하는 마지막 인덱스를 찾는다
3. 선택한 숫자의 인덱스부터 마지막 인덱스의 인덱스 차이만큼 요소를 제거
4. 남은 배열을 반환
그런데 이러면 이중 for문이 되어버려, 시간이 초과해버렸다.
def solution(arr): result = [] for i in range(len(arr)): if i == 0: result.append(arr[i]) continue item = arr[i] tail = result[len(result) - 1] if item != tail: result.append(item) return result
그래서 위와 같이, 단순히 순회를 하면서 result의 마지막 요소와 다른 경우만 push하도록 하니까 통과했다.
def solution(arr): result = [] for item in arr: if result[-1:] != [item]: result.append(item) return result
좀 더 가독성 좋은 답변은 위와 같다.
배열 슬라이싱을 이용해 안전하게 값을 추출, 비교를 한다. 혹시나 해서 `result[-1:][0]`을 써봤는데, 이러면 다시 out of range 예외가 발생한다.
'programing > Algorithm' 카테고리의 다른 글
[Programmers] 두 정수 사이의 합 (0) 2021.01.01 [Programmers] 나누어 떨어지는 숫자 배열 (0) 2021.01.01 [baekjoon] 1655 - 가운데를 말해요 (0) 2020.12.12 [Programmers] 3진법 뒤집기 (0) 2020.11.15 [Programmers] 가운데 글자 가져오기 (0) 2020.11.15 댓글