LJC.LOG
May 21, 2024

[스택/큐] 프로그래머스 코딩테스트 알고리즘 공부 - JAVA

문제 설명

배열 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보다 작거나 같은 정수

입출력예시

내가 생각한 해결방법

1) 입력받은 arr을 for문을 돌려서 값을 하나씩 가져온다.

2) ArrayList를 이용해서 첫 번째 값은 그냥 넣고 두 번째 값부터 이전 값과 비교하여 다른 경우에만 ArrayList에 넣는다.

3) ArrayList에 삽입된 값을 배열로 변환하여 반환한다.

내가 작성한 답안지

다른사람의 풀이

이 답안지는 변수 preNum을 사용하여 이전 숫자와 비교하는 방식으로 더 깔끔하게 구현되었습니다.

내 답안지와 비교했을 때 방식은 비슷하나 배열의 n-1값을 비교하는게 아닌 변수에 값을 담아서 비교하여 데이터를 삽입하는 구조로 소스구현을 한 것으로 보인다.

배열의 원소가 9보다 작다는 것을 이용하여 변수에 10을 넣어서 처리한 것.. 기발하다.

스택을 이용한 풀이

위 답안지는 리턴타입을 바꿔서 좀 더 쉽게 짠 소스코드다.

스택을 이용하여 연속된 숫자를 제거하는 방법을 사용했습니다.

스택이 비어 있거나 현재 숫자가 스택의 최상단 값과 다를 때만 스택에 추가합니다.

스택을 사용하면 추가적인 비교 연산 없이 간단하게 연속된 숫자를 제거할 수 있습니다.

Related Posts