[프로그래머스][8번째로 푼 문제] 12906. 같은 숫자는 싫어 (240809)
구분
코딩테스트 연습 > 스택/큐
채점결과
- 정확성: 71.9
- 효율성: 28.1
- 합계: 100.0 / 100.0
제출 일자
2024년 08월 09일 23:43:58
문제 설명
배열 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
문제의 예시와 같습니다.
def solution(arr):
result = [arr[0]]
for i in range(1, len(arr)):
if arr[i] != arr[i-1]:
result.append(arr[i])
return result
느낀 점
def solution(arr):
i = 1
while i < len(arr):
for key in range(i, len(arr)):
if arr[key] == arr[key-1]:
del arr[key]
i = key
break
return arr
처음에 짠 소스는 이거였는데 타임 아웃으로 틀려서 그냥 Hoxy...?
하고 해본 소스는 통과되어서 정답 처리가 되었다.
그건 그렇고 프로그래머스에 AI한테 질문하기
기능이 생겼던데 신기하더라...
- 제 코드는 왜 정답이 아닌가요?
- 제출한 코드를 분석 중입니다. 최대 1분 정도 소요될 수 있으니 잠시만 기다려주세요.
- 사용자가 작성한 코드에는 논리적 오류가 있습니다. 코드를 자세히 살펴보면, arr
배열의 요소를 제거하는 동안 동일한 배열에 대해 반복을 실행하고 있습니다. 배열에서 요소를 삭제하면 배열의 길이가 변하고, 이로 인해 인덱스 관리가 복잡해집니다. 따라서 실행 중에 인덱스가 예상치 못한 방식으로 변할 수 있으며, 이는 잘못된 요소를 삭제하거나 무한 루프에 빠질 수 있는 원인이 됩니다. 반복문을 사용할 때는 배열의 구조를 직접 변경하는 것보다, 새로운 배열에 조건에 맞는 요소만 추가하는 방식을 고려해 보세요. 현재 요소가 이전 요소와 다를 때만 새 배열에 추가하는 방식입니다. 이는 배열의 길이 문제 때문에 발생하는 복잡성을 해결할 수 있습니다. 이런 방식을 사용하면, 배열의 길이가 변경되어도 원하는 동작을 보다 안정적으로 수행할 수 있습니다.
내꺼 처음 타임아웃 뜬 소스를 돌려보니 저렇게 답해주더라.... 사실 안 읽어봄ㅋㅋ 그냥 무지성으로 다시 짰다..
김재엽, 탈퇴한 사용자, 조이정, 김용진 외 10 명
님의 풀이
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def no_continuous(s):
# 함수를 완성하세요
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(no_continuous("133303"))
Shit! index slicing goat.... 이럴 때 보면 최대진 교수님 수업 들으면서 머리 깨지게 인덱스 슬라이싱 실습 했던 것이 많은 도움이 되었던 것 같다..
프로그래밍을 php
로 입문해서 그런지 Python
의 인덱스 슬라이싱을 볼 때마다 너무 좋다.
그냥
g
o
a
t
그냥 막 좋아.... 그래 좋아....
홍성수, chess, Yoon Sung Won, Dong-ryull Shin 외 1 명
님의 풀이
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def no_continuous(s):
# 함수를 완성하세요
result = []
for c in s:
if len(result) == 0 or result[-1] != c:
result.append(c)
return result
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(no_continuous("133303"))
인상 깊었던 댓글: Stack을 활용했으니 이게 출제 의도랑 제일 맞는 것 같아요 | 땃쥐 | 2023.01.21 09:17
이진호, 이석곤, 변정훈, 이강원 외 37 명
님의 풀이
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def no_continuous(s):
return [s[i] for i in range(len(s)) if s[i] != s[i+1:i+2]]
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(no_continuous("133303"))
goat.. 나도 이 정도는 하고 싶다~
마엘, KwonHS, 이찬우
님의 풀이
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def no_continuous(s):
# 함수를 완성하세요
a=[ v for i,v in enumerate(s) if s[i-1]!=s[i]]
return a
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(no_continuous("13330"))
goat... 네.... 전 그냥 전과할게요~ 네~ 저는 죽을때까지~ 네~ ㅠㅠㅠㅠ 프론트하고 싶은데 ㅠㅠㅠㅠ 그냥 꿈을 접을게요 ㅠㅠㅠㅠㅠ
최대진 교수님께 프로그래밍 입문 수업을 들으면서 배웠던 거 중에
ㄹㅇ 이걸 어디에 써먹지...? 싶었던 함수가 enumerate
였다
근데 고수들은 ㄹㅇ 항상 너무 야무지게 써먹으시네..... 에휴....ㄱ ㅡ래요 나 문과에요!!!!!!!