https://school.programmers.co.kr/learn/courses/30/lessons/12987
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
생각보다 쉬웠다..
출전순서는 의미없고 무조건 한번씩만 겨룬다는게 중요했다!
=> A와 B를 내림차순으로 정렬해서, two pointer 이용해서 무조건 B가 이기도록 하는 경우의 수를 세면 된다.
A[i], B[j] 를 비교했을 때,
1. B가 이김 (A[i] < B[j]) : 둘이 겨뤘다고 생각하고 answer count 증가 => i++, j++
2. B가 지거나 비김 : 무효로 취급! 더 작은 카드를 가진 A와 B가 겨뤄보도록 해야함 => i++, j그대로
이렇게 간단하게 풀린다고,,? 왜지??
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(vector<int> A, vector<int> B) {
int answer = 0;
sort(A.begin(), A.end(), greater<>());
sort(B.begin(), B.end(), greater<>());
int j = 0; // B index
for(int i = 0; i<A.size(); i++){
if(A[i] < B[j]){
// win
answer++;
j++;
}
// 지거나 비김
// 아무것도 할필요가 없음 (j 그대로)
}
return answer;
}
swea : 숫자야구 (1) | 2024.08.29 |
---|---|
프로그래머스 : 완전탐색 - 전력망을 둘로 나누 (0) | 2024.08.27 |
프로그래머스 : dp - 등굣길 (0) | 2024.08.23 |
프로그래머스 : 리코쳇 로봇 (0) | 2024.08.23 |
백준 : 14248 - 점프 (0) | 2024.08.21 |