Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개인공부
- til
- 항해
- 코딩테스트
- 내일배움캠프
- 자바
- 스파르타코딩클럽
- 백준
- Spring
- 스파르타내일배움캠프TIL
- 중심사회
- Flutter
- Python
- 컴퓨터개론
- 99클럽
- 99일지
- MySQL
- 스파르타내일배움캠프
- java
- AWS
- 개발자스터디
- 운영체제
- 소프트웨어
- 프로그래머스
- 부트캠프
- 국비
- 개발자블로그
- 스파르타내일배움캠프WIL
- wil
- 컴퓨터구조론 5판
Archives
- Today
- Total
컴공생의 발자취
배열 (중복제거, 복사) / Map - getOrDefault 및 프로그래머스 (롤케이크 자르기) 본문
728x90
반응형
💡 오늘의 학습 키워드
- 배열 중복제거
- 배열 복사
* Arrays.copyOf(복사할 배열, 복사할 길이)
* Arrays.copyOfRange(복사할 배열, 시작 인덱스, 마지막 인덱스)
- Map : getOrDefault
- 프로그래머스
* 롤케이크 자르기 : 미들러 문제( level 2 )
배열 중복제거
배열 복사
- Arrays.copyOf( 복사할 배열, 복사할 길이 )
: 지정한 배열을 인덱스 0부터 원하는 길이만큼 복사
- Arrays.copyOfRange( 복사할 배열, 시작 인덱스, 마지막 인덱스 )
: 지정한 배열에서 특정 범위만큼의 요소들을 복사해 새로운 배열로 반환
getOrDefault
: 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
getOrDefault(Object key, V DefaultValue)
오늘의 회고
문제1 : [롤케이크 자르기]
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
롤케이크에 토핑이 종류별로 올라가 있다.
롤케이크에 올라간 토핑의 종류를 배열로 받았을 때,
2개의 롤케이크로 나누었을 때 토핑의 종류가 공평하도록 자르는 방법의 수를 리턴하는 문제이다.
아래와 같은 로직으로 문제를 풀이했다.
- 2개로 나누어서 왼쪽, 오른쪽의 토핑 종류 세기
- 토핑 종류를 세고난 후 왼쪽과 오른쪽의 통핑 종류 개수가 같다면 answer++;
배열을 이용해서 풀었다.
왼쪽, 오른쪽의 경우 종류를 구하는 함수를 따로 만들어서 구했다.
테스트는 통과했지만, 제출했을 때 시간초과로 통과하지 못했다.
어떻게 해야 시간 초과를 줄일 수 있는지 감을 잡지 못해 다른 사람들의 블로그를 참고했다.
- 어떻게 해결했는지(통과하지 못함)
// 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;
}
}
* 참고한 블로그
- 무엇을 새롭게 알았는지
맵을 사용해서 저렇게 풀이할 수 있다는 게 신기했다.
Map, Set, List 등 내일배움캠프를 하면서 관련 개념을 익히고 실습하면서 사용해봤지만
문제에 어떻게 적용시키는지와 응용력이 아직 현저히 부족한 것 같다.
조금 더 분발하고 다양한 코드를 보며 내 것으로 흡수시켜야겠다!
내일 학습할 것은 무엇인지 (최대 3개)
- 정보처리기사 실기 공부
- 클럽99 코딩테스트(비기너) 문제풀이
- 내배캠 자바 수강
728x90
반응형
'💡 코테' 카테고리의 다른 글
백준 (10811번 - 바구니 뒤집기) (1) | 2024.04.27 |
---|---|
백준 (30455번 - 이제는 더 이상 물러날 곳이 없다) (2) | 2024.04.26 |
백준 (25311번 - UCPC에서 가장 쉬운 문제 번호는?) (0) | 2024.04.24 |
백준 (23812번 - 골뱅이 찍기 - 돌아간 ㅍ) (0) | 2024.04.23 |
프로그래머스 (가장 가까운 같은 글자 및 H-Index) (1) | 2024.04.22 |