본문 바로가기

개발 관련 기타/알고리즘

[프로그래머스] (C++) 숫자 게임

문제

힌트

  • 정렬을 이용하자.

소스 코드 (1차 시도)

// [프로그래머스] 숫자 게임

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int solution(vector<int> A, vector<int> B) {
	int answer = 0;
	std::sort(A.begin(), A.end());
	std::sort(B.begin(), B.end());
	vector<int>::iterator B_iter = B.begin();
	for (vector<int>::iterator iter = A.begin(); iter != A.end(); iter++) {
		while (B_iter != B.end()) {
			if (*B_iter >= *iter) {
				answer++;
				B_iter++;
				break;
			}
			B_iter++;
		}
		if (B_iter == B.end()) break;
	}
	return answer;
}

채점 결과 (1차 시도)

정확성: 16/18 (76.2)
효율성: 3/3 (14.3)
합계: 90.5 / 100.0

 

문제 원인

  • 문제를 다시 살펴보니 문제 요건 중에 A점수와 B점수가 같은 경우에는 점수를 얻지 못하는 요건이 있었다.
  • 따라서, 위 소스 코드에서 등호를 없애주니 통과하였다.

소스 코드 (2차 시도)

// [프로그래머스] 숫자 게임

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int solution(vector<int> A, vector<int> B) {
	int answer = 0;
	std::sort(A.begin(), A.end());
	std::sort(B.begin(), B.end());
	vector<int>::iterator B_iter = B.begin();
	for (vector<int>::iterator iter = A.begin(); iter != A.end(); iter++) {
		while (B_iter != B.end()) {
			if (*B_iter > *iter) {
				answer++;
				B_iter++;
				break;
			}
			B_iter++;
		}
		if (B_iter == B.end()) break;
	}
	return answer;
}

채점 결과 (2차 시도)

정확성: 18/18 (85.7)
효율성: 3/3 (14.3)
합계: 100.0 / 100.0