프로그래머스 풀이/level1

[Programmers] level 1) 문제 '같은 숫자는 싫어' 풀이

진기명기 2023. 5. 23. 19:33
🫠 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()를 그렇게 많이 쓰면서 이번에는 왜 쓸 생각을 못했을까.. 
이렇게 간단하고 쉬운걸 ㅠㅠ 정확성과 효율성도 모두 통과다.. 😭