https://school.programmers.co.kr/learn/courses/30/lessons/12987
이 문제에서 가장 중요한 조건은
1. 각 사원은 딱 한 번씩 경기를 합니다.
2. A팀은 빠르게 출전순서를 정했다.
요 두개의 조건 이다.
A팀의 출전순서가 이미 정해져 있는 상태이므로 백터A와 벡터B를 각각 정렬하여 비교 할 수 있다.
정렬이 왜 가능하지?
-> 벡터A를 정렬했다고 해서 A팀의 출전순서가 바뀌는 것은 아니다. 단순히 벡터B와의 비교를 위해 각 사원의 자연수만을 정렬한 것이다.
'각 사원은 딱 한 번씩 경기를 합니다.' 이 조건은 왜 중요하지?
-> B팀의 입장에서는 무조건 이기는 경기만 하면 된다. 나머지 경기는 중요하지 않음. 결국, 이기는 경기만 정한 상태에서 나머지 경기는 지거나 무승부가 되도 상관없다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int solution(vector<int> A, vector<int> B) {
int answer = 0;
sort(A.begin(), A.end());
sort(B.begin(), B.end());
int idx_a = 0;
int idx_b = 0;
while (idx_a < A.size() && idx_b < B.size()) {
if (B[idx_b] > A[idx_a]) {
answer++;
idx_b++;
idx_a++;
} else {
idx_b++;
}
}
return answer;
}
ex) A : 5, 1, 3, 7 B : 2, 2, 6, 8
=> A : 1, 3, 5, 7 B : 2, 2, 6, 8
while 문
step 1)
idx_a = 0
idx_b = 0
A[idx_a] = 1, B[idx_b] = 2
answer = 0
step 2)
idx_a = 1
idx_b = 1
A[idx_a] = 3, B[idx_b] = 2
answer = 1
step 3)
idx_a = 1
idx_b = 2
A[idx_a] = 3, B[idx_b] = 6
answer = 1
step 4)
idx_a = 2
idx_b = 3
A[idx_a] = 5, B[idx_b] = 8
answer = 2
step 5)
idx_a = 3
idx_b = 4
A[idx_a] = 7, B[idx_b] =
answer = 3
반복문 종료
'CS > Algorithm' 카테고리의 다른 글
프로그래머스 - (PCCP 모의고사) 보물 지도 c++ (0) | 2023.05.19 |
---|---|
프로그래머스 - 순위 (c++) (0) | 2023.05.17 |
프로그래머스 - 전력망을 둘로 나누기 (c++) (0) | 2023.05.16 |
백준 - 최소 환승 경로(2021번) c++ (0) | 2023.04.11 |
삼성 SW 역량 테스트 - 시험 감독 (c++) (0) | 2023.03.21 |