🌈 TIL

  • 행의 합, 열의 합과 관련있다는 규칙을 찾았다!!!
  • 제출하면 틀렸는데 정렬해 준 다음에 비교를 해줘야 함... 정렬을 하지 않고 비교하는 것은 n번째 컨테이너와 n번째 타입의 수가 같은지를 비교하는 거라서 의미가 없다. 단순하게 생각하면, 교환하려면 개수가 같아야 하니까
  • 컨테이너 안에 있는 수가 최대 10^9라서 합을 저장하는 배열의 타입을 long으로 해줘야한다.

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    /*
     * Complete the 'organizingContainers' function below.
     *
     * The function is expected to return a STRING.
     * The function accepts 2D_INTEGER_ARRAY container as parameter.
     */

    public static String organizingContainers(List<List<Integer>> container) {
        long[] rowSum = new long[container.size()];
        long[] colSum = new long[container.size()];
        
        for(int i=0; i<container.size(); i++) {
            List<Integer> row = container.get(i);
            for(int j=0; j<container.size(); j++) {
                rowSum[i] += (long)row.get(j);
                colSum[j] += (long)row.get(j);
            } 
        }
        
        Arrays.sort(rowSum);
        Arrays.sort(colSum);
        
        for(int i=0; i<container.size(); i++) {
            if(rowSum[i] != colSum[i]) {
                return "Impossible";
            }
        }
        
        return "Possible";
    }
}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int q = Integer.parseInt(bufferedReader.readLine().trim());

        IntStream.range(0, q).forEach(qItr -> {
            try {
                int n = Integer.parseInt(bufferedReader.readLine().trim());

                List<List<Integer>> container = new ArrayList<>();

                IntStream.range(0, n).forEach(i -> {
                    try {
                        container.add(
                            Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                                .map(Integer::parseInt)
                                .collect(toList())
                        );
                    } catch (IOException ex) {
                        throw new RuntimeException(ex);
                    }
                });

                String result = Result.organizingContainers(container);

                bufferedWriter.write(result);
                bufferedWriter.newLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        bufferedReader.close();
        bufferedWriter.close();
    }
}

👇 문제 출처

https://www.hackerrank.com/challenges/organizing-containers-of-balls/problem?isFullScreen=true

0개의 댓글