99클럽 코테 스터디 7일차 TIL

Marin·2024년 7월 28일
0

TIL

목록 보기
6/17
post-thumbnail

1 | 오늘의 문제

1. 같은 숫자는 싫어

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


2. 잘못된 접근

연속임을 확인하는 boolean형 메서드를 만들까 했다.
아니면 오늘 정보처리기사 시험보다가 나온 boolean형 배열로 확인을 할까 했는데, 문제를 풀다가 깨달았다.
굳이 boolean에 집착할 필요가 없다고...

3. 접근

+ 유의사항 및 사고

  1. 연속된 문자 제거는 중복 제거와 다르다.

+) 중복 제거는 6일차 TIL에서 해시로 한 번 풀었다.

  1. 새로운 배열을 정의, 하지만 길이를 알 수 없다
  • int index 초기화
  • ìnt[] temp 초기화
  1. 첫 번째 원소는 무조건 포함되어야 한다.
  2. for문으로 전의 원소와 같으면 temp에 추가한다.

4. 풀이

import java.util.*;

public class Solution {
    public int[] solution(int[] arr) {
     
        int[] tempArr = new int[arr.length];
        tempArr[0] = arr[0]; //연속이 아닌 첫번째 원소 저장
        int index = 1;
        
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] != arr[i - 1]) { //연속 아님
                tempArr[index++] = arr[i];
            }
        }
        
        return Arrays.copyOf(tempArr, index);
    }
}

2 | 회고 및 키워드

1. 오늘의 키워드

  • 연속된 문자와 중복 헷갈리지 말기
  • 임시 배열 초기화, for문 사용
  • Array.copyOf(복사할 배열 이름, 복사할 배열의 길이)
  • List 학습하기

2. 회고와 반성

List로 푸는 방법이 정석? 가장 간결한 것 같은데 아직 List를 공부하지 않아서 쓰지를 못한다... 어제 Set도 그렇고 아직 새로 배워야 할 것들이 넘쳐난다.

그래도 오늘 정보처리기사 실기를 보고 와서 시간을 온전히 java 공부에 쏟을 수 있을 것 같다. 매일 생각하는 거지만 코테 스터디를 신청하길 잘했다. 강제력이 필요한 인간인지라.

profile
대학생 | BE | 취준 | 습관이 나를 만든다

0개의 댓글