해커랭크 문제 풀이

📝 Organizing Containers of Balls (30.0)

주어진 2차원 container 배열을 따라

각 container ballType의 갯수에 따라 분배되는데

공을 교환해서 각 컨테이너가 가질수 있는 ballType이 한가지가 될 수 있는 경우

Possible/Impossible을 출력하는 문제 였다.

💣 헤맸던 점

문제 푸는 시간 자체는 얼마 안걸렸는데

- Each container contains only balls of the same type.

- No two balls of the same type are located in different containers.

문장해석을 실수 해서 시원하게 한번에 풀진 못했다.

처음에 이해한 문제는

0c 1c 2c 각 컨테이너 번호 당 가지고있는 공을

0타입 1타입 2타입 이라고 봤을때 같은 번호의 공을 가지고 있어야하는 조건으로 판단해서

각 컨테이너당 가지고 있는 자신이 아닌 번호의 ballType을 집계하고

다른 컨테이너에 있는 자신의 타입 ballType 공 갯수가 같을때를 Possible로 보고 풀었다.

Submit하고 풀었는데 이번 예제는 TestCase가 너무 터무니없이 나와있어서 어디서 틀렸는지 많이 해맸다.

풀이에서 나오듯 ArrayList 객체를 만들어서 풀었는데

처음에는

if문 조건 판별시 **ArrayList.get(index)**로 작성했는데

조건에 상관없이 무조건 true로 판정되어 Impossible이 리턴되는 문제가 있었다.

Int와 int의 차이, 레퍼런스 타입의 문제를 놓쳐 시간을 조금 잡아먹었는데

자바에서 첫글자가 대문자 -> 클래스 -> 레퍼런스

counting.get(index).intValue() != ballType.get(index).intValue() 이나

int 변수를 초기화해 사용해 풀었다.

💡 풀이

static String organizingContainers(int[][] container) {

        List<Integer> ballType = new ArrayList<>();
        List<Integer> counting = new ArrayList<>();
        
        

        for(int x=0; x<container.length; x++){

            int count = 0;

            for(int y=0; y<container[x].length; y++){
                count += container[x][y];
            }
            counting.add(count);
        }

        for(int i=0; i<container.length; i++){
            int ball = 0;
            for(int j=0; j<container[i].length; j++){
                ball += container[j][i];
            }
            
            ballType.add(ball);
        }

        Collections.sort(counting);
        Collections.sort(ballType);

        for (int k = 0; k < counting.size(); k++) {
            int contain = counting.get(k);
            int type = ballType.get(k);

            if (contain != type) {
                return "Impossible";
            }

        }

        return "Possible";

    }

예제를 보고 몇번 대입해보니 문제자체는 쉬웠다.

각 컨테이너가 가지고있는 공의 갯수를 구한뒤

각 ballType마다 공의 갯수를 구해

컨테이너들이 가지고있는 공의 갯수와 ballType의 공의 갯수가 일치한다면

Possible 일치하지않는다면 Impossible을 리턴하는것으로 풀었다.