🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
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
32
|
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0; // 롤케이크 공평하게 자르는 방법의 수
Set<Integer> set1 = new HashSet<>(); // 형
Map<Integer, Integer> map2 = new HashMap<>(); // 동생
for(int t : topping) {
map2.put(t, map2.getOrDefault(t, 0) + 1);
}
for(int t : topping) {
// 형은 원소를 추가한다.
set1.add(t);
// 동생은 원소를 뺀다.
map2.put(t, map2.get(t) - 1);
if(map2.get(t) == 0) { // 원소를 뺐을 때 값이 0이면, Map에서 제거
map2.remove(t);
}
// 가짓수가 같다면, 정답 + 1
if(set1.size() == map2.size()) {
answer++;
}
}
return answer;
}
}
|
cs |
🧩 해결 아이디어
• HashSet + HashMap
- 시간 복잡도 : O(N)
1_ 일단 반복문을 돌며 동생의 Map에 토핑 종류와 갯수 <Integer, IntegeR>를 추가한다.
2_ 한 번 더 반복문을 돌며, 형의 Set에는 토핑 원소를 추가하고, 동생의 Map에는 토핑 원소 갯수를 뺀다.
이 때, 빼고 난 후 동생의 토핑 원소 갯수가 0개라면, Map에서 해당 값을 제거한다.
"형의 토핑 원소 갯수 = 동생의 토핑 원소 갯수"라면 정답 + 1을 한다.
🔺 다른 풀이들
- HashSet 하나랑 int형 배열 활용해 푸셨다.(좀 더 빠름)
[프로그래머스] lv2 롤케이크 자르기(JAVA)
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이
sumdev.tistory.com
- Map만 2개 써도 된다.
💬 느낀 점
첨에 Set 2개 만들어서 해보려다가 시간 초과 떠가지고 (아무래도 1,000,000에 O(N^2)이니까..)
다른 방법 찾아보고 했다...
어려운 문제는 아닌데 아이디어 생각이 안 나는 것이 아숩다 ..ㅠ
Set 과 Map을 조합해 쓸 줄이야.. 뇌를 말랑하게 만들좌,,,,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[JAVA] LV2. 롤케이크 자르기
롤케이크 자르기문제설명철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이
velog.io
[연습문제] 롤케이크 자르기 - JAVA
https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞
yummy0102.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 숫자 카드 나누기 (JAVA) (0) | 2023.11.12 |
---|---|
[프로그래머스/Lv. 2] 삼각 달팽이 (JAVA) (0) | 2023.11.12 |
[프로그래머스/Lv. 2] 연속된 부분 수열의 합 (JAVA) (1) | 2023.10.30 |
[프로그래머스/Lv. 1] 대충 만든 자판(JAVA) (0) | 2023.10.26 |
[프로그래머스/Lv. 2] [1차] 캐시 (JAVA) (0) | 2023.10.25 |