[ 99클럽 코테 스터디 28일차 TIL ] 배열 (중복제거, 복사) / Map - getOrDefault 및 프로그래머스 (롤케이크 자르기)
💡 오늘의 학습 키워드
- 배열 중복제거
- 배열 복사
* 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 코딩테스트(비기너) 문제풀이
- 내배캠 자바 수강