title: Programmers - 숫자 게임
date: 2022-08-20
tags:
- Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/12987
문제 요약
A팀과 B팀은 각 N명씩 존재하며, 각 사람들은 1G 이하의 자연수를 받는다.
A팀의 자연수 순서가 정해졌을 때, B팀은 해당 수보다 큰 수를 제출할 때 승리한다. 이 때 얻을 수 있는 최대 승리 횟수를 retrun한다.
문제 풀이
Level 3에 어울리지 않는 너무 쉬운 문제이다.
A의 순서가 주어진다는 것은 A가 제출하는 수에 맞추어 원하는 수를 제출할 수 있다는 뜻이다.
A의 순서를 고정할 필요 없이, A와 B를 정렬하여 풀면 된다.
A,B 모두 오름차순으로 정렬한다.
B는 앞에서부터 순서대로 A와 비교를 시작한다.
B가 클 경우 승리하므로 A의 앞에서 없애며, 반대의 경우 승리하지 못하므로 A의 가장 큰 수를 소모시켜야 하기에 A의 뒤에서부터 없앤다.
효율성 테스트를 포함하여 최대 약 11ms의 성능을 확인할 수 있었다.
프로그램
#include <vector>
#include <algorithm>
using std :: vector ;
using std :: sort ;
int solution ( vector < int > A , vector < int > B )
{
int answer = 0 ;
int iHumanSize = A.size () ;
int iALeftIndex = 0 ;
int iARightIndex = iHumanSize - 1 ;
sort ( A.begin () , A.end () ) ;
sort ( B.begin () , B.end () ) ;
for ( int i = 0 ; i < iHumanSize ; ++i )
{
if ( A [ iALeftIndex ] < B [ i ] )
{
++ iALeftIndex ;
++ answer ;
}
else
{
-- iARightIndex ;
}
}
return answer ;
}
'Judge' 카테고리의 다른 글
Programmers - 다단계 칫솔 판매 (0) | 2022.08.23 |
---|---|
Programmers - 선입 선출 스케줄링 (0) | 2022.08.23 |
Programmers - 스티커 모으기 (0) | 2022.08.19 |
Programmers - 기지국 설치 (0) | 2022.08.19 |
Programmers - 스타 수열 (0) | 2022.08.18 |