볼링공 고르기 (Java)

박지훈·2021년 2월 17일
0
post-custom-banner

문제

A, B 두 사람이 볼링을 치고 있습니다. 두 사람은 서로 무게가 다른 볼링공을 고르려고 합니다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여됩니다. 또한 같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주합니다. 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재합니다.

예를 들어 N이 5이고, M이 3이며 각각의 무게가 차례대로 1, 3, 2, 3, 2 일 때 각 공의 번호가 차례대로 1번부터 5번까지 부여됩니다. 이때 두 사람이 고를 수 있는 볼링공 번호의 조합을 구하면 다음과 같습니다.

(1번, 2번), (1번, 3번), (1번, 4번), (1번, 5번), (2번, 3번), (2번, 5번), (3번, 4번), (4번, 5번)

결과적으로 두 사람이 공을 고르는 경우의 수는 8가지입니다. N개의 공의 무게가 각각 주어질 때, 두 사람이 볼링공을 고르는 경우의 수를 구하는 프로그램을 작성하세요.



풀이

  1. 볼링공 배열 생성.

  2. 가능한 볼링공 번호(인덱스) 조합표를 만든다.

  3. 만든 번호 조합표를 통해 번호쌍에 따른 2개의 볼링공의 무게가 다르다면 count++한다. --> 두 사람이 서로 무게가 다른 볼링공을 고르는 경우의 수를 구하는 과정이라고 생각하면 된다!



코드

import java.util.*;
import java.io.*;

public class Main {

    static int N, M;
    static int[] ball;
    static int answer = 0;
    static ArrayList<Integer> combX = new ArrayList<>();
    static ArrayList<Integer> combY = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        ball = new int[N];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            ball[i] = Integer.parseInt(st.nextToken());
        }

        for (int i = 0; i < N - 1; i++) {
            for (int j = i + 1; j < N; j++) {
                combX.add(i);
                combY.add(j);
            }
        }

        // 해설에서는 다르게 풀었음.
        // https://github.com/ndb796/python-for-coding-test/blob/master/11/5.java
        for (int i = 0; i < combX.size(); i++) {
            if (ball[combX.get(i)] != ball[combY.get(i)])
                answer++;
        }

        System.out.println(answer);
    }
}
profile
Computer Science!!
post-custom-banner

0개의 댓글