컴공생의 발자취

[ 99클럽 코테 스터디 28일차 TIL ] 배열 (중복제거, 복사) / Map - getOrDefault 및 프로그래머스 (롤케이크 자르기) 본문

💡 코테/99클럽

[ 99클럽 코테 스터디 28일차 TIL ] 배열 (중복제거, 복사) / Map - getOrDefault 및 프로그래머스 (롤케이크 자르기)

MNY 2024. 4. 25. 22:37
728x90
반응형
💡 오늘의 학습 키워드

- 배열 중복제거
- 배열 복사
    * Arrays.copyOf(복사할 배열, 복사할 길이)
    * Arrays.copyOfRange(복사할 배열, 시작 인덱스, 마지막 인덱스)
- Map : getOrDefault
- 프로그래머스
    * 롤케이크 자르기 : 미들러 문제( level 2 )

 

배열 중복제거

 

[Java/Short] 배열/리스트 중복제거 방법 : 전체, 인접한 요소 중복 제거

해당 글에서는 배열/리스트에서 중복된 요소들을 제거하기 위한 방법으로 전체에서 중복요소를 제거하는 방법과 인접한 상태에서의 중복된 요소를 제거하는 방법에 대해서 공유합니다. 1) 배열

adjh54.tistory.com

 

배열 복사

  • Arrays.copyOf( 복사할 배열, 복사할 길이 )

: 지정한 배열을 인덱스 0부터 원하는 길이만큼 복사

 

  • Arrays.copyOfRange( 복사할 배열, 시작 인덱스, 마지막 인덱스 )

: 지정한 배열에서 특정 범위만큼의 요소들을 복사해 새로운 배열로 반환

 

getOrDefault

: 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드

getOrDefault(Object key, V DefaultValue)

 


 

오늘의 회고

문제1  : [롤케이크 자르기]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

롤케이크에 토핑이 종류별로 올라가 있다.

롤케이크에 올라간 토핑의 종류를 배열로 받았을 때, 

2개의 롤케이크로 나누었을 때 토핑의 종류가 공평하도록 자르는 방법의 수를 리턴하는 문제이다.

 

아래와 같은 로직으로 문제를 풀이했다.

  • 2개로 나누어서 왼쪽, 오른쪽의 토핑 종류 세기
  • 토핑 종류를 세고난 후 왼쪽과 오른쪽의 통핑 종류 개수가 같다면 answer++;

배열을 이용해서 풀었다. 

왼쪽, 오른쪽의 경우 종류를 구하는 함수를 따로 만들어서 구했다.

테스트는 통과했지만, 제출했을 때 시간초과로 통과하지 못했다.

 

어떻게 해야 시간 초과를 줄일 수 있는지 감을 잡지 못해 다른 사람들의 블로그를 참고했다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 어떻게 해결했는지(통과하지 못함)
// input : 롤케이크에 올려진 토핑들의 번호

// 2개로 나누어서 왼쪽, 오른쪽의 토핑 종류 세기
// 토핑 종류를 세고난 후 왼쪽과 오른쪽의 통핑 종류 개수가 같다면 answer++;

// return : 롤케이크를 공평하게 자르는 방법의 수
import java.util.Arrays;

class Solution {
    public int leftToppingType(int[] topping, int idx) {
        int[] copy = Arrays.copyOf(topping, idx+1);
        int[] arr = Arrays.stream(copy).distinct().toArray();
        int left = arr.length;
        return left;
    }
    public int rightToppingType(int[] topping, int idx) {
        int[] copy = Arrays.copyOfRange(topping, idx, topping.length);
        int[] arr = Arrays.stream(copy).distinct().toArray();
        int right = arr.length;
        return right;
    }
    
    public int solution(int[] topping) {
        int cakes = topping.length;
        int answer = 0;
        
        for (int idx = 0; idx<cakes-1; idx++) {
            int left = leftToppingType(topping, idx);
            int right = rightToppingType(topping, idx+1);
            
            if (left == right) {
                answer++;
            }
        }
        
        return answer;
    }
}

 

* 참고한 블로그

 

[JAVA] LV2. 롤케이크 자르기

롤케이크 자르기문제설명철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이

velog.io

 

  • 무엇을 새롭게 알았는지

맵을 사용해서 저렇게 풀이할 수 있다는 게 신기했다.

Map, Set, List 등 내일배움캠프를 하면서 관련 개념을 익히고 실습하면서 사용해봤지만

문제에 어떻게 적용시키는지와 응용력이 아직 현저히 부족한 것 같다.

조금 더 분발하고 다양한 코드를 보며 내 것으로 흡수시켜야겠다!

 

내일 학습할 것은 무엇인지 (최대 3개)

  • 정보처리기사 실기 공부
  • 클럽99 코딩테스트(비기너) 문제풀이
  • 내배캠 자바 수강
728x90
반응형