[Java Algorithm] 프로그래머스 Lv.1 _ 같은 숫자는 싫어

2025. 8. 18. 21:16·Algorithm Study

[문제]

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

 

[Algorithm]

처음에는 stream의 distinct를 사용해서 중복 제거 하는 방법을 생각했는데 그렇게 하면 연속되지 않은 중복 숫자도 삭제돼서 오류 발생

그래서 filter를 활용해서 조건부로 이전 인덱스와 같은 수가 아닌 경우에만 담아서 return 하도록 코드 작성

 

[Code]

import java.util.stream.*;

public class Solution {
    public int[] solution(int []arr) {
        return IntStream.range(0, arr.length)
                .filter(i -> i == 0 || arr[i] != arr[i-1])
                .map(i -> arr[i])
                .toArray();
    }
}

 

근데 stream은 복잡하고 효율성이 좀 떨어진다고 한다,,

클로드가 극 비추함 ㅜ

 

IntStream을 사용하는 이유는 Stream은 배열의 값이고, 지금 필요한 것은 인덱스이기 때문에 인덱스는 정수라서 IntStream 사용

(인덱스를 사용해야 앞의 숫자와 같은지 아닌지 비교 가능)

 

 

[+ 다른 사람 풀이]

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preNum = 10;
        for(int num : arr) {
            if(preNum != num)
                tempList.add(num);
            preNum = num;
        }       
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i).intValue();
        }
        return answer;
    }
}

 

 

여기서 preNum이 10인 이유는 0으로 하면 정확도가 떨어지기 때문

배열의 첫번째 값이 0이면 0은 건너뛰고 비교하는 예외가 생길 수 있다고 한다

 

import java.util.*;

public class Solution {
    public int[] solution(int[] arr) {
        List<Integer> result = new ArrayList<>();
        
        // 첫 번째 요소는 항상 추가
        result.add(arr[0]);
        
        // 두 번째 요소부터 이전 요소와 비교
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] != arr[i-1]) {  // 이전 요소와 다르면 추가
                result.add(arr[i]);
            }
        }
        
        // List를 배열로 변환
        return result.stream().mapToInt(i -> i).toArray();
    }
}

 

클로드가 만들어준 방법

이게 가장 깔끔하고 좋아보인다

 

 

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.2 _ 프로세스  (0) 2025.08.19
[Java Algorithm] 프로그래머스 Lv.2 _ 올바른 괄호  (0) 2025.08.19
[Java Algorithm] 프로그래머스 Lv.2_ 피로도  (4) 2025.08.05
[Java Algorithm] 프로그래머스 Lv.2_ 카펫  (4) 2025.08.04
[Java Algorithm] 프로그래머스 Lv.2_ 소수 찾기  (2) 2025.07.31
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.2 _ 프로세스
  • [Java Algorithm] 프로그래머스 Lv.2 _ 올바른 괄호
  • [Java Algorithm] 프로그래머스 Lv.2_ 피로도
  • [Java Algorithm] 프로그래머스 Lv.2_ 카펫
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • Side Project (4)
      • Algorithm Study (53)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리얼클래스
    영어독학
    javaalgorithm
    타일러영어
    정보처리기사실기
    프로그래머스
    정처기실기
    Java
    study
    리얼학습일기
    ios개발
    ios프로그래밍
    The Office
    ios프로그래밍을위한스위프트기초
    정보처리기사
    나도코딩
    프로그래밍언어
    파이썬문법
    파이썬
    파이썬기초
    자바알고리즘
    알고리즘
    Algorithm
    영어회화
    javaStudy
    Python
    스위프트기초
    더오피스
    정보처리기사프로그래밍언어
    SWIFT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.1 _ 같은 숫자는 싫어
상단으로

티스토리툴바