https://school.programmers.co.kr/learn/courses/30/lessons/12987
문제
- xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다.
- 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다.
- 숫자 게임의 규칙은 다음과 같습니다.
- 먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.
- 각 사원은 딱 한 번씩 경기를 합니다.
- 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다.
- 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.
- 만약 숫자가 같다면 누구도 승점을 얻지 않습니다.
- 전체 사원들은 우선 무작위로 자연수를 하나씩 부여받았습니다.
- 그다음 A팀은 빠르게 출전순서를 정했고 자신들의 출전 순서를 B팀에게 공개해버렸습니다.
- B팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 팀원들의 출전 순서를 정했습니다.
- 이때의 B팀이 얻는 승점을 구해주세요.
- A 팀원들이 부여받은 수가 출전 순서대로 나열되어있는 배열 A와 i번째 원소가 B팀의 i번 팀원이 부여받은 수를 의미하는 배열 B가 주어질 때, B 팀원들이 얻을 수 있는 최대 승점을 return 하도록 solution 함수를 완성해주세요.
제한사항
- A와 B의 길이는 같습니다.
- A와 B의 길이는 1 이상 100,000 이하입니다.
- A와 B의 각 원소는 1 이상 1,000,000,000 이하의 자연수입니다.
입출력 예제
설계과정
1. A, B 배열을 오름차순으로 정렬한다.
2. A와 B 배열의 각 값들을 뒤에서부터 비교해서 B가 크면 answer 변수에 1을 더하고 B의 인덱스 변수를 1 빼서 다음을 비교한다.
3. 결과를 출력한다.
다른 사람의 풀이를 참조했다.
compareTo() 를 사용해서 풀어보려고 했으나 예시에 전부 만족하지 않아서 결국은 다른 사람의 풀이를 봤다.
풀이과정
1. A, B 배열을 오름차순으로 정렬한다.
- 정렬은 기본적으로 Arrays.sort(); 를 사용한다. 다만 이번 문제에서는 N차원 배열을 정렬하기에 그에 맞게 사용한다.
2. i와 j 변수를 통해 A 배열과 B 배열의 인덱스를 설정한다.
- i : A 배열의 인덱스
- j : B 배열의 인덱스
3. B 배열의 값이 A 배열의 값보다 크면 결과 변수인 answer를 1 더하고 B 배열 인덱스인 j를 감소시킨다.
4. 결과를 출력한다.
답안소스
- 프로그래머스
import java.util.*;
class Solution {
public int solution(int[] A, int[] B) {
int answer = 0;
int loc = 0;
Arrays.sort(A);
Arrays.sort(B);
for (int i = A.length - 1, j = B.length - 1; i >= 0; i--) {
if(A[i] < B[j]) {
answer++;
j--;
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv.2 최댓값과 최솟값 (0) | 2023.04.11 |
---|---|
[프로그래머스]Lv.1 짝수와 홀수 (0) | 2023.04.10 |
[프로그래머스]Lv.3 단속카메라 (0) | 2023.04.07 |
[프로그래머스]Lv.3 등굣길 (0) | 2023.04.06 |
[프로그래머스]Lv.3 이중우선순위큐 (0) | 2023.04.05 |