-
[프로그래머스/Level 3] 숫자 게임 (C++)알고리즘 문제풀이/프로그래머스 2021. 5. 7. 12:00
programmers.co.kr/learn/courses/30/lessons/12987
제가 제일 어려워하는 유형 중 하나인 그리디 문제였습니다.
사실 다 약함일단 입력값의 크기가 최대 100,000 이라서 완전탐색으로는 TLE가 발생합니다. 그래서 DP, 이분탐색, 힙, 그리디 다양하게 생각해봤는데 도저히 문제를 해결하지 못해서 풀이를 참고했습니다. A팀의 출전 순서가 이미 공개되어 A 배열은 고정 시켜야 한다는 고정관념에 사로잡혀 문제를 해결하는데 어려움을 겪었던 것 같습니다.
풀이
1. A배열과 B배열을 오름차순으로 정렬
2. A인덱스와 B인덱스를 따로 선언과 초기화
3. A[aIdx]와 B[bIdx]를 비교 (B의 인덱스가 B의 크기가 되면 종료)
3-1. A[aIdx] < B[bIdx] 면 두 인덱스 모두 증가
3-2. A[aIdx] >= B[bIdx] 면 B의 인덱스만 증가, answer 값 증가 (해당 카드는 버리는 카드로 쓰겠다는 의미)
#include <string> #include <vector> #include <algorithm> using namespace std; int solution(vector<int> A, vector<int> B) { int answer = 0, aIdx = 0, bIdx = 0; sort(A.begin(), A.end()); sort(B.begin(), B.end()); while(1) { if(bIdx == B.size()) break; if(A[aIdx] < B[bIdx]) { aIdx++; bIdx++; answer++; } else { bIdx++; } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 2] 2개 이하로 다른 비트 (C++) (0) 2021.07.27 [프로그래머스/Level 1] 숫자 문자열과 영단어 (C++) (0) 2021.07.26 [프로그래머스/Level 3] 길 찾기 게임 (C++) (0) 2021.05.07 [프로그래머스/Level 2] 행렬 테두리 회전하기 (C++) (0) 2021.04.29 [프로그래머스/Level 1] 로또의 최고 순위와 최저 순위 (C++) (0) 2021.04.28