[이것이 코딩테스트다] 실전문제5. 볼링공 고르기 (JAVA)

반응형
728x90
반응형

문제

A, B 총 2명의 사람이 있다. 두사람은 서로 다른 볼링공을 골라야한다. 볼링공은 총 N개이며, 각 볼링공마다 무게가 있다. 공의 번호는 1번부터 N까지다.

예시)
N = 5, M = 3
공의 번호 : 1 2 3 4 5
공의 무게 : 1 3 2 3 2

이때 두사람이 고를 수 있는 볼링공 번호의 조합 개수는?

(1, 2) -> (1, 3)
(1, 3) -> (1, 2)
(1, 4) -> (1, 3)
(1, 5) -> (1, 2)
(2, 3) -> (3, 2)
(2, 4) -> (3, 3) -> 불가능
(2, 5) -> (3, 2)
(3, 4) -> (2, 3)
(3, 5) -> (2, 2) -> 불가능
(4, 5) -> (3, 2)

-> 총 8개다.

 

 

 

 

풀이코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

import static java.util.stream.Collectors.toList;

public class Main {
    private static int N;
    private static int M;
    private static int[] arrA;

    private static int result;

    public static void main(String[] args) {
        input();

        /**
         (1, 2) (1, 3) (1, 4) (1, 5)
         (2, 1) == (1, 2) 이므로 j 를 i + 1로 시작
         */
        for (int i = 1; i < arrA.length; i++) {
            for (int j = i + 1; j < arrA.length; j++) {
                if (arrA[i] != arrA[j]) {
                    result++;
                }
            }
        }

        System.out.println(result);
    }

    /*
     5 3
     1 3 2 3 2
     */
    private static void input() {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();

        arrA = new int[N + 1];

        for (int i = 1; i < N + 1; i++) {
            int value = scanner.nextInt();

            arrA[i] = value;
        }
    }
}

 

 

 

 

Stream 을 사용한 풀이

https://devfunny.tistory.com/671

 

[Stream] 두 리스트의 조합 구하기

Stream 코드 private static void getPairs() { List numbersA = Arrays.asList(1, 2, 3); List numbersB = Arrays.asList(4, 5); List pairs = numbersA.stream() .flatMap(i -> numbersB.stream() .map(j -> new..

devfunny.tistory.com

 

위 코드를 참고하여 다시한번 풀어보았다.

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

import static java.util.stream.Collectors.toList;

public class MainStream {
    private static int N;
    private static int M;
    private static List<Integer> listA = new ArrayList<>();

    public static void main(String[] args) {
        input();

        getPairs();
    }

    /*
     5 3
     1 3 2 3 2
     */
    private static void input() {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();

        for (int i = 1; i < N + 1; i++) {
            int value = scanner.nextInt();

            listA.add(value);
        }
    }

    private static void getPairs() {

        List<int[]> pairs = listA.stream()
                .flatMap(i -> listA.stream()
                        .filter(j -> i < j)
                        .map(j -> new int[]{i, j}))
                .collect(toList());

        System.out.println(pairs.size());
    }
}

 

 

반응형

Designed by JB FACTORY