YataNox
[Java] Lv.2 롤케이크 자르기 본문
문제
문제 풀이
생각보다 단순했다.
그냥 각 인원의 토핑 종류를 저장할 배열을 각각 만들고
한 쪽에 일단 전부 몰아준 뒤에 하나씩 다른쪽에 넘겨주면서 토핑 종류를 비교하면 쉽다.
자바 코드
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
// 토핑 종류
int toppingKind = Arrays.stream(topping).max().getAsInt();
// 각 인원이 가진 토핑 개수를 기록할 배열, 1 ~ toppingKind만큼의 수를 위해 toppingKind + 1
// 추가로 마지막에 가진 토핑 종류가 몇개인지 기록하기 위한 +1 해서 총 toppingKind + 2 갯수의 배열
int[] t1 = new int[toppingKind + 2];
int[] t2 = new int[toppingKind + 2];
// 첫 토핑을 철수에게
// 가진 토핑 종류도 +1
t1[topping[0]]++;
t1[t1.length - 1]++;
// 나머지는 일반 동생에게 준다.
for(int i = 1; i < topping.length; i++){
// 동생이 가진 토핑이 처음 가지는 것이라면 가진 종류 +1
if(t2[topping[i]] == 0)
t2[t2.length - 1]++;
// 토핑 갯수 +1
t2[topping[i]]++;
}
// 철수와 동생의 가진 토핑 종류 갯수가 같다면 정답 +1
if(t1[t1.length - 1] == t2[t1.length - 1])
answer++;
// 동생이 가진 토핑을 하나씩 철수에게 줘가면서 토핑 종류 갯수를 비교한다.
for(int i = 1; i < topping.length; i++){
// 철수가 토핑을 하나 동생에게서 가져간다.
// 처음 갖는 종류의 토핑일 경우 종류의 수 +1
if(t1[topping[i]] == 0)
t1[t1.length - 1]++;
t1[topping[i]]++;
// 동생이 토핑을 하나 철수에게 줄 때 해당 종류의 토핑을 더 이상 가지고 있지 않다면
// 토핑 종류의 수 -1
if(t2[topping[i]] - 1 == 0)
t2[t2.length - 1]--;
t2[topping[i]]--;
// 하나 넘겨줄 때마다 두 사람의 토핑 종류 개수를 비교한다.
if(t1[t1.length - 1] == t2[t1.length - 1])
answer++;
}
return answer;
}
}
'코딩 테스트 > PROGRAMMERS' 카테고리의 다른 글
[Java] Lv.2 연속 부분 수열 합의 개수 (0) | 2024.06.20 |
---|---|
[Java] Lv.2 택배상자 (0) | 2024.06.20 |
[Java] Lv.2 우박수열 정적분 (0) | 2024.06.18 |
[Java] Lv.2 숫자 카드 나누기 (0) | 2024.06.18 |
[Java] Lv.2 귤 고르기 (0) | 2024.06.14 |