0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • 코테
  • Programmers
  • kakao
  • CSS
  • 프로그래머스
  • til
  • java
  • 카카오
  • 자바
  • 코딩테스트

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

[12906번] 같은 숫자는 싫어
🧠 Algorithm/[JAVA] Programmers

[12906번] 같은 숫자는 싫어

2022. 6. 13. 13:56
반응형

✔️ 문제 설명

배열 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. 순서를 지켜야하므로 List로 arr를 받는다
2. iter를 돌며 이전꺼와 같으면 삭제
3. arr로 반환

 

✔️ 1차 코드 (효율성 실패)

import java.util.*;
import java.util.stream.Collectors;

public class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
        int iter = 1;
        Object prev = list.get(0);

        while(list.size() != iter) {
            Object header = list.get(iter);
            if(prev == header) {
                list.remove(iter);
            } else {
                prev = header;
                iter++;
            }
        }

        answer = list.stream().mapToInt(Integer::intValue).toArray();

        return answer;
    }
}

 

✔️ 2차 코드 (성공)

  • List에서 중간 요소를 추가/삭제하면 해당 요소 뒤에 요소들의 자리를 한 칸씩 이동시켜야하므로 시간복잡도가 늘어나게 된다.
  • 그 부분이 효율성을 통과하지 못한 이유라고 생각했고 삭제하는 방식이 아닌 새로운 요소에 추가하는 방식으로 개선했다.
import java.util.*;

public class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        List<Integer> list = new ArrayList<>();
        int num = arr[0];
        list.add(num);

        for(int i = 1; i < arr.length; i++) {
            if(arr[i] != num) {
                list.add(arr[i]);
                num = arr[i];
            }
        }
        
        answer = list.stream().mapToInt(Integer::intValue).toArray();

        return answer;
    }
}

 

📄 원문

https://programmers.co.kr/learn/courses/30/lessons/12906

반응형
저작자표시 (새창열림)

'🧠 Algorithm > [JAVA] Programmers' 카테고리의 다른 글

[12915번] 문자열 내 마음대로 정렬하기  (0) 2022.06.15
[12910번] 나누어 떨어지는 숫자 배열  (0) 2022.06.14
[17682번] [1차] 다트 게임  (0) 2022.06.12
[12903번] 가운데 글자 가져오기  (0) 2022.06.11
[17681번] 비밀지도  (0) 2022.06.10
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바