🫠 Programmers (level 1) 👉🏻 문제 26번 (같은 숫자는 싫어)
✏️ 문제 설명
배열 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]
function solution(arr) {
let i = 0
while(1) {
if(i == arr.length) break
while(1) {
if(arr[i] === arr[i+1]) {
arr.splice(i+1, 1)
} else {
break
}
}
i++
}
return arr
}
✅ 2중 while문을 돌려 첫번째 요소와 두 번째 요소가 같으면 splice()를 통해 반복되는 요소를 삭제했다.
❗️ 하지만 이 방법은 '정확성 테스트'는 통과했지만, '효율성 테스트'는 시간초과로 통과하지 못했다.
따라서 아래와 같은 코드로 다시 구현하였다.
💡 또 다른 코드
function solution(arr) {
let i = 0
let res = []
while(1) {
if(i == arr.length) break
if(arr[i] !== arr[i+1]) {
res.push(arr[i])
i++
} else {
i++
}
}
return res
}
✅ 처음 코드와 반대로 이번에는 중복되지 않는 수만 임시 배열에 추가하는 코드로 구현해 보았다.
해당 코드는 '효율성 테스트'도 통과하였다 🫠
💡 다른 사람 풀이
function solution(arr) {
return arr.filter((item, index) => item !== arr[index + 1])
}
🫠 와 평소에는 filter()를 그렇게 많이 쓰면서 이번에는 왜 쓸 생각을 못했을까..
이렇게 간단하고 쉬운걸 ㅠㅠ 정확성과 효율성도 모두 통과다.. 😭
'프로그래머스 풀이 > level1' 카테고리의 다른 글
[Programmers] level 1) 문제 '행렬의 덧셈' 풀이 (1) | 2023.05.27 |
---|---|
[Programmers] level 1) 문제 '3진법 뒤집기' 풀이 *** (1) | 2023.05.25 |
[Programmers] level 1) 문제 '이상한 문자 만들기' 풀이 (0) | 2023.05.22 |
[Programmers] level 1) 문제 '문자열 내림차순으로 배치하기' 풀이 (0) | 2023.05.18 |
[Programmers] level 1) 문제 '가운데 글자 가져오기' 풀이 (0) | 2023.05.18 |