프로그래머스 Level 3 숫자게임
숫자게임 (프로그래머스 Level 3)
https://school.programmers.co.kr/learn/courses/30/lessons/12987
처음에는 어떻게 풀지 곰곰히 고민을 하다
(ex : B의 각 요소를 어떻게 움직여서 풀까?)
문제 해결의 요점이 그것이 아닌 것 같아서
한번 문제를 천천히 다시 읽어보았다
- A의 배열은 움직이지 않으며, B는 ‘임의로’ 배치 방식을 바꾸어
최대한 많은 수를 통과시키려 한다
-> 따라서 굳이 A의 ‘순서’를 보장할 필요가 없다고 생각하였다
두 배열을 오림차순 ‘정렬’을 하고,
각 요소의 ‘작은’ 요소부터 비교를 시작 - b의 요소는 ‘재사용’이 불가하기에 제거하거나,
index를 조정하는 방식을 사용해야 함
(queue로 구현하였지만, 지금 보니 그냥 int index를 사용했어도 될 것 같았다) - A의 인덱스 부분과 B의 요소가 작거나 같다면
다시 queue의 요소를 체크하도록 continue
그렇지 않다면 정답을 증가시키고, A의 인덱스를 증가
이러한 방식으로 풀었다
Code
#include <vector>
#include<algorithm>
#include<queue>
using namespace std;
int solution(vector<int> A, vector<int> B) {
sort(A.begin(), A.end());
sort(B.begin(), B.end());
queue<int> bq;
for (auto b : B)
{
bq.push(b);
}
int answer = 0;
int aIndex = 0;
while (bq.empty() == false)
{
int bt = bq.front();
bq.pop();
if (bt <= A[aIndex])
{
continue;
}
answer++;
aIndex++;
}
return answer;
}
댓글남기기