반응형
A, B 두 사람이 볼링을 치고 있습니다. 두 사람은 서로 무게가 다른 볼링공을 고르려고 합니다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여됩니다. 또한 같은 무게의 공이 여러개 있을 수 있지만, 서로 다른 공으로 간주합니다. 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재합니다.
문제
N개의 공의 무게가 각각 주어질 때, 두 사람이 볼링공을 고르는 경우의 수를 구하는 프로그램을 작성하세요.
입력 조건
- 첫째 줄에 볼링공의 개수 N, 공의 최대 무게 M이 공백으로 구분되어 각각 자연수 형태로 주어집니다.
(1 <= N <= 1,000, 1 <= M <= 10) - 둘째 줄에 각 볼링공의 무게 K가 공백으로 구분되어 순서대로 자연수 형태로 주어집니다.
(1 <= K <= M)
출력 조건
- 첫째 줄에 두 사람이 볼링공을 고르는 경우의 수를 출력합니다.
입력 예시
5 3
1 3 2 3 2
출력 예시
8
<문제 분석>
같은 무게라도 번호가 다르면 다른 공으로 치부한다.
즉, (1, 2), (1, 3), (1, 4), (1, 5)번 조합이 가능하다.
<문제 풀이>
1. 순차탐색으로 공의 무게를 비교해서 다르면 count++ 하자.
<코드>
import java.util.Scanner;
import java.util.Arrays;
// [이코테](그리디) 05. 볼링공 고르기
public class Main {
static int N, M;
static int A[];
public void InputData() {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
A = new int[N];
for (int i=0; i<N; i++) {
A[i] = sc.nextInt();
}
}
public void Solve() {
int ans = 0;
for (int i=0; i<N-1; i++) {
for (int j=i+1; j<N; j++) {
if (A[i] != A[j]) ans++;
}
}
System.out.println(ans);
}
public static void main (String[] args)
{
Main m = new Main();
m.InputData();
m.Solve();
}
}
------------------------------------------------------------------------
<정답 해설>
1. 무게마다 볼링공이 몇 개인지 확인한다. (1 ~ M)
2. A가 선택한 볼링공 무게의 수를 전체 수에서 빼면 B가 선택할 수 있는 경우의 수가 나온다.
3. 이것을 A가 선택하는 경우의 수와 곱해준 것을 합산한다.
<정답 코드>
import java.util.*;
public class Main {
public static int n, m;
// 1부터 10까지의 무게를 담을 수 있는 배열
public static int[] arr = new int[11];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
arr[x] += 1;
}
int result = 0;
// 1부터 m까지의 각 무게에 대하여 처리
for (int i = 1; i <= m; i++) {
// N에서 A가 선택할 수 있는 개수를 빼면 B가 선택하는 경우의 수가 나온다.
n -= arr[i]; // 무게가 i인 볼링공의 개수(A가 선택할 수 있는 개수) 제외
result += arr[i] * n; // B가 선택하는 경우의 수와 곱해주기
}
System.out.println(result);
}
}
반응형
'알고리즘 PS > 이것이 코딩 테스트다' 카테고리의 다른 글
[이코테][기출] 04. 만들 수 없는 금액 (0) | 2022.10.18 |
---|---|
[이코테][기출] 03. 문자열 뒤집기 (0) | 2022.10.18 |
[이코테][기출] 02. 곱하기 혹은 더하기 (0) | 2022.10.18 |
댓글