프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1. 같은 종류의 토핑이 여러개 있더라도 하나로 간주. ( 중복 처리 = Hash 사용 고려 )
2. HashMap 의 Key 값에 토핑의 종류, Value 값에 토핑의 개수 정의.
3. HashMap 2개 사용. ( 철수와 동생이 동일하게 나눠먹는지 비교하기 위함 , hm1 , hm2)
4. hm1에 topping [ 0 ] 을 넣고, hm2 에 나머지 topping 을 모두 넣는다.
HashMap<Integer, Integer> hm1 = new HashMap<>();
HashMap<Integer, Integer> hm2 = new HashMap<>();
hm1.put(topping[0], 1);
for(int i=1;i<topping.length;i++){
hm2.put(topping[i], hm2.getOrDefault(topping[i], 0) + 1);
}
5. topping [ 1 ] 부터 topping [ end ] 까지 hm1에 넣고 , hm2는 제거하며 사이즈를 비교
6. 중복된 토핑이 들어올 경우 value 값을 getOrDefalut로 +1 씩 count 해줌. ( Size에 영향 X )
7. hm2 의 중복된 토핑 ( 여러개 존재하는 ) 이 제거될 경우 value 값을 getOrDefalut로 -1 씩 차감 ( Size에 영향 X )
8. value값이 1 , 즉 제거될 토핑의 개수가 하나 남았다면 hm.remove로 제거 ( Size에 영향 O )
9. 반복문을 통해 topping [ 1 ] 부터 시작해서 hm1에 추가 , hm2의 topping [ 1 ] 제거 ( 여러개 있을 경우 기존 value 값 -1 )

10. hm1.size() == hm2.size() 의 경우 answer을 +1 함.

11. 진행 도중 hm1.size() > hm2.size() 가 될때부턴 사이즈가 같아질 경우가 없으므로 반복문 탈출

나의풀이 ( 코드 )
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
HashMap<Integer, Integer> hm1 = new HashMap<>();
HashMap<Integer, Integer> hm2 = new HashMap<>();
hm1.put(topping[0], 1);
for(int i=1;i<topping.length;i++){
hm2.put(topping[i], hm2.getOrDefault(topping[i], 0) + 1);
}
for (int i = 1; i < topping.length; i++) {
hm1.put(topping[i], hm1.getOrDefault(topping[i], 0) + 1);
if (hm2.get(topping[i]) > 1) {
hm2.put(topping[i], hm2.getOrDefault(topping[i], hm2.get(topping[i])) - 1);
}else {
hm2.remove(topping[i]);
}
if (hm1.size() > hm2.size()) {
break;
}
if(hm1.size()==hm2.size()){
answer++;
}
}
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/JAVA 자바] 숫자 변환하기 (1) | 2023.11.23 |
|---|---|
| [프로그래머스/JAVA 자바] [1차] 프렌즈4블록 (1) | 2023.11.22 |
| [프로그래머스/JAVA 자바] [3차] 파일명 정렬 (1) | 2023.11.20 |
| [프로그래머스/JAVA 자바] 뒤에 있는 큰 수 찾기 (0) | 2023.11.20 |
| [프로그래머스/JAVA 자바] 스킬트리 (1) | 2023.11.18 |