[프로그래머스] Level1-같은 숫자는 싫어

JIEUN YANG·2022년 11월 3일
0

중복된 요소가 존재하지 않도록 배열의 형태를 정리하는 문제.
자료구조의 스택과 큐를 이용하여 답을 도출하고, 시간초과가 나지 않도록 주의해야 한다.



for loop 활용

function solution(arr) {
    var answer = [];
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === arr[i+1]){
            // 원소가 같으면 shift()로 동일요소 삭제
            arr.shift()
            i -= 1
        }else {
            answer.push(arr[i])
        }
    }
    return answer;
}
  • for loop로 모든 요소를 차례로 탐색할 때, 현재 index요소와 다음 index 요소값이 동일하면 배열의 첫번째 요소를 삭제(Queue의 선입선출 특징을 이용) 한다.
  • 삭제(Dequeue)이후 루프탐색의 기준이 되는 인덱스(i)를 -1로 초기화하여 요소를 다시 탐색할 수 있게 세팅한다.
  • 반복하다보면 중복요소는 사라지고, 이때 else 구문에서 answer 배열에 각 엘리먼트를 push(Stack의 요소추가 특징 이용)하여 데이터를 정리한다.



문제는 해결했지만, 시간초과 때문에 정답은 될 수 없는 코드이다.
log(n)의 시간복잡도를 가지는 for loop에서 조건문의 실행문에 인덱스 순서를 초기화해주는 것이 문제가 되지 않았을까 싶다.
for문을 이용하면 데이터의 크기와 실행시간이 정비례하는 데다가 그 안에서 다시한번 인덱스 순서를 임의로 세팅하니, 효율적인 방법은 되지 않나보다.
재도전 해봐야겠다..!

profile
violet's development note

0개의 댓글

관련 채용 정보