![[프로그래머스] 롤케이크 자르기 - LV2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRoXzt%2FbtsMhwMfHjd%2FfeihA1RPmvkHYMVGuorOFK%2Fimg.png)
📝 문제
https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[설명]
케이크를 1번 잘라서 토핑의 개수가 같아지는 개수 구하기
[접근 방법]
topping 배열에서 중복되는 토핑이 있으므로 중복을 제거해주는 hashset을 활용해 구현
배열 2개를 만들어 하나의 배열은 앞에서부터 탐색, 또다른 배열은 뒤에서부터 탐색 후
대각선 비교를 해서 토핑의 개수가 같은 경우를 롤케이크를 공평하게 자르는 수(answer)에 포함하기
하나의 롤케이크를 잘라서 비교를 하기 때문에 하나의 HashSet를 이용
-> 중간에 HashSet을 한 번 비워줘야한다. (set.clear() : 모든 값 제거)
[주의 사항]
- 이중 반복문을 돌면, 시간 초과 발생
- 단일 for문으로 구현해 시간 복잡도 O(N)으로 해결!
- HashSet 사용법 잘 기억하자.
- 무조건 손으로 써가면서 해결법 찾아보자.
🔑 풀이
import java.util.HashSet;
class Solution {
public int solution(int[] topping) {
HashSet<Integer> set = new HashSet<>();
int[] arr1 = new int[topping.length];
int[] arr2 = new int[topping.length];
for (int i = 0; i < topping.length; i++) {
set.add(topping[i]);
arr1[i] = set.size();
}
set.clear(); // set 비우기
for (int i = topping.length - 1; i >= 0; i--) {
set.add(topping[i]);
arr2[i] = set.size();
}
int answer = 0;
for (int i = 0; i < topping.length - 1; i++) {
if (arr1[i] == arr2[i + 1]) {
answer++; // 대각선 비교
}
}
return answer;
}
}
📌 [TIL]
HashSet 활용법
⭐️ 공부 참고 자료
https://coding-factory.tistory.com/554
[Java] 자바 HashSet 사용법 & 예제 총정리
HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순
coding-factory.tistory.com
'프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 3일차 TIL - 프로그래머스 : 바탕화면 정리 (0) | 2025.04.02 |
---|---|
[프로그래머스] 오픈채팅방 - LV 2 (3) | 2025.02.12 |
[프로그래머스] 디펜스 게임 - LV 2 (0) | 2025.02.12 |
[프로그래머스] 콜라 문제 (0) | 2024.09.30 |
[프로그래머스] 가장 가까운 같은 글자 (1) | 2024.09.25 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!