코딩테스트/프로그래머스
[프로그래머스] 롤케이크 자르기 (Java)
개발자마이
2023. 2. 21. 02:04
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
배열을 하나씩 잘라가며 양쪽의 토핑 종류 개수를 (토핑개수 x) 비교하는 문제이다.
- 형(older)은 HashMap으로, 동생(younger)은 HashSet으로 선언
- topping 배열을 한 바퀴 돌며 older한테 전부 넣어주기 : put(토핑번호, 개수);
- topping 배열을 한 바퀴 돌며
1) 해당 토핑을 older에서 1개 빼기 (1개 뺀 후 0개인 경우 키값 제거 필요함. 키의 개수가 size()로 잡히기 때문)
2) 해당 토핑을 younger에 넣어주기
3) older와 younger의 사이즈(토핑종류의 개수) 비교 후 같으면 answer 증가
Note
- 안 될 거 알면서도 꼭 한 번 먼저 작성해보는 습관이 있다. 배열의 길이가 길다 싶으면 이중 루프는 무조건 자제하자.
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
Map<Integer, Integer> older = new HashMap<>();
Set<Integer> younger = new HashSet<>();
for(int i : topping){
older.put(i, older.getOrDefault(i, 0) + 1);
}
for(int i : topping){
older.put(i, older.get(i) - 1);
if(older.get(i) == 0){
older.remove(i);
}
younger.add(i);
if(older.size() == younger.size()){
answer++;
}
}
return answer;
}
}
반응형