https://programmers.co.kr/learn/courses/30/lessons/12906
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
문제

배열 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보다 작거나 같은 정수
발상
배열에서 중복을 걸러내는 문제이다.
처음엔 간단하게 생각하여 스트림으로 변환 후 distinct로 걸러냈는데, 결과값을 확인해보니 연속으로 중복된 숫자만 걸러내고, 연속되지 않은 같은 숫자는 출력해야 하는 경우였다.
그래서 일반적인 반복문을 돌리면서 연속된 숫자들을 앞뒤로 비교하는 로직이 필요하였다.
의사코드
1. 초기값 세팅(임시 리스트 생성)
2. 반복문(주어진 자료의 길이만큼){
1.첫번째일 경우 임시리스트 넣고 리턴
2. 그외엔 자료의 이전값과 현재값 비교 후 다를 경우 추가
}
3. 임시 리스트를 스트림을 사용하여 int배열로 변환
4. 반환
개선
코드 작성의 편의성을 위하여 컬렉션 타입을 사용하여 리스트에 해당되는 값들을 add한 뒤에
최종적으로 만들어진 리스트를 스트림을 사용하여 int 배열로 변환하였는데, 다른 사람들의 코드는 반복문을 돌리면서 하나하나 매핑하는 방식을 사용한 경우가 있었다.
시간적으로는 조금 더 빠를 수 있는데, 가독성과 실무활용을 생각하면 조금 느려도 스트림을 사용하는 것이 더 나을 것 같다.
'IT > Algorithm' 카테고리의 다른 글
[programmers] 직사각형 별찍기 (0) | 2022.07.05 |
---|---|
[programmers] 나누어 떨어지는 숫자 배열 (0) | 2022.07.04 |
[Programmers] 가운데 글자 가져오기 (0) | 2022.07.04 |
[Programmers] 2016년 (0) | 2022.07.03 |
[Programmers] 모의고사 (0) | 2022.07.02 |