반응형
▷ 문제 : Organizing Containers of Balls (Medium)
▷ 해결 날짜 : 2022.08.03
▷ 소요 시간 : 1시간 20분
▷ 풀이 과정 :
일단 문제가 참 긴데, 쉽게 설명하자면 컨테이너가 담긴 배열이 주어지고, 각 컨테이너별로 서로 다른 타입의 공들이 들어가 있는데, 이 공들을 같은 타입끼리 각 컨테이너에 넣을 수 있냐 없냐를 구하는 문제이다.
몇가지만 짚고 넘어가면 구현하는데에는 그렇게 큰 시간이 들지는 않는다.
- 각 컨테이너의 크기는 처음에 주어진 공의 총개수와 동일하다. (이유가 뭐냐면 문제에서는 한번에 서로 다른 컨테이너 각각의 공들을 스왑 할 수 있다 뭐다 하면서 설명이 들어가 있는데, 이런 조건이면 무조건 스왑만 가능하다는 조건이고 크기는 초기에 주어진 각 컨테이너 공의 개수를 따른다는 것을 알 수 있다.)
- 한 컨테이너에는 타입이 동일한 공으로만 채워줘야 한다. (즉, 특정 컨테이너의 크기와 특정 타입을 가진 공의 개수가 동일해야 한다는 점이다.)
위에서 설명한 것들을 염두에 두고 구현을 진행하게 되면,
- 우선 각 컨테이너의 크기(각 컨테이너의 공 개수)와 동일한 타입의 공 개수를 구해서 담아준다.
- 위에서 설명한 것 처럼 결국 "특정 컨테이너 크기 === 특정 타입을 가진 공의 개수" 여야 하기 때문에, 우선 정렬을 해준 뒤 비교를 해주기만 하면 된다.
▷ 구현
function organizingContainers(container) {
// Write your code here
const totalBallCount = container.map((v) => v.reduce((a, c) => a + c));
const totalBallTypeCount = Array(container[0].length).fill(0);
for (let i = 0; i < container.length; i++) {
for (let j = 0; j < container.length; j++) {
totalBallTypeCount[i] += container[j][i];
}
}
totalBallCount.sort((a, b) => a - b);
totalBallTypeCount.sort((a, b) => a - b);
return totalBallCount.every((v, i) => v === totalBallTypeCount[i])
? "Possible"
: "Impossible";
}
▷ 복기 :
나 같은 경우는 아무래도 영어라 읽기 힘든데, 문제까지 길고 해서 이해하는데 시간이 좀 걸렸다.
좀 생각이 필요한 문제인데, 그래도 적절한 조건들이 전부 나와있어서 문제를 이해만 한다면 손쉽게 해결할 수 있는 문제였다.
반응형
댓글