Algorithm

볼링공 고르기

태인킴 2020. 9. 24. 13:39
반응형

1. 문제

A, B 두 사람이 볼링을 치고 있습니다. 볼링공의 갯수 N이 주어지고, 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재 합니다. 이때 M이 주어지고, 각각의 무게가 차례대로 주어졌을 때, 두 사람이 고를수 있는 볼링공의 조합의 갯수를 구하시오. 각 볼링공은 무게가 같아도 고유의 번호를 가지고 있습니다. 두 사람은 서로 무게가 다른 공을 고르려고 합니다. 첫째줄은 N과 M이 순서대로 공백을 기준으로 주어지고, 둘째줄에는 볼링공의 무게가 주어집니다.

 

 

2. 입력

5 3

1 3 2 3 2

 

 

3. 출력

8

 

 

4. 접근

1. 볼링공의 무게 별로 개수를 합쳐 집게 합니다.

2. 볼링공의 최소 무게인 1부터 최대 무게 M 까지 반복문을 돌면서

3. (무게가 i 인 볼링공의 개수) * (무게가 i 인 볼링공의 개수를 제외한 나머지 볼링공의 개수)

4. 위 곱한값을 반복문이 끝날때 까지 합친후 반환 합니다.

 

 

5. Java 소스 코드

public class Page315 {
    //볼링공 고르기
    // N개의 볼링고이 주어지고
    // M까지의 볼링공 무게가 존재 할때
    public static void main(String[] args) {
        int N = 5;
        int M = 3;
        int[] weights = new int[]{1, 3, 2, 3, 2};
        System.out.print(new Page315().solution(N, M, weights));
    }

    public int solution(int N, int M, int[] weights) {
        // 볼링공의 최대 무게는 10 입니다.
        int[] total = new int[11];
        int result = 0;

        // 각 무게에 해당하는 볼링공의 개수 카운트
        for (int i = 0; i < N; i++) {
            total[weights[i]] += 1;
        }
        // Arrays.stream(weights).forEach(weight -> total[weight] += 1);

        // 1부터 M 까지의 각 무게에 대해서 처리
        for (int i = 1; i < M + 1; i++) {
            N -= total[i];
            result += total[i] * N;
        }

        return result;
    }
}
반응형