목차
- 문제
- 내가 푼 방법
- 자바 코드
- 결과 및 회고
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/132265#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 내가 푼 방법
빅오 O(n)이라는 시간제한이 있었기 때문에, 이중 for문을 돌리게 되면 시간초과가 났다.
이중 for문 외에는 방법이 생각이 안 났기 때문에, 다른 분들의 코드를 이해한 후에 풀 수 있었다.
형이 가진 롤케이크를 동생에게 나눠준다고 접근하면 쉽다.
따라서 형이 가진 롤케이크를 Map<Integer, Integer>에 담았고, 동생에게 나눠주는 롤케이크를 Set<Integer>에 담았다.
첫 번째 for문은 형이 가진 롤케이크 토핑을 카운트해서 Map에 담는 과정이고, 두 번째 for문은 동생에게 나눠줌과 동시에 카운트한 토핑 개수가 0이 될 경우, Map에서 해당 토핑을 지워주면서 Map과 Set의 사이즈를 비교했다.
3. 자바 코드
깃허브 풀이 주소
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
Map<Integer, Integer> all = new HashMap<>();
Set<Integer> set = new HashSet<>();
for (int top : topping) {
all.put(top, all.getOrDefault(top, 0) + 1);
}
for (int top : topping) {
set.add(top);
all.put(top, all.get(top) - 1);
if (all.get(top) == 0) {
all.remove(top);
}
if (all.size() == set.size()) answer++;
}
return answer;
}
}
4. 결과 및 회고
자른다는 접근에 치우치다 보니까 나눠준다는 방법을 생각하지 못했던 것 같다.
그리고 동일한 자료형에 담아둔다는 생각을 깨부수는 문제였어서 다음에 다시 풀어봐야겠다.
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 베스트앨범 (0) | 2023.05.11 |
---|---|
[JAVA] 프로그래머스 - 기지국 설치 (0) | 2023.05.10 |
[JAVA] 프로그래머스 - 소수 찾기 (0) | 2023.05.09 |
[JAVA] 프로그래머스 - 가장 큰 수 (0) | 2023.05.09 |
[JAVA] 프로그래머스 - 숫자 변환하기 (0) | 2023.05.09 |
댓글