반응형
인사고과 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/152995
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[구현 환경]
- C++
[문제 설명]
- 각 사원마다 [근무 태도 점수, 동료 평가 점수]가 기록되어 있음
- 사원 A가 임의의 사원 B보다 두 점수가 모두 낮으면 인센티브 수령이 불가능함
- 이외의 케이스는 두 점수의 합이 높은 순으로 석차를 매기고 첫번째 배열의 사원(완호)의 석차를 return
[제한 사항]
- 1 ≤ scores의 길이 ≤ 100,000
- scores의 각 행은 한 사원의 근무 태도 점수와 동료 평가 점수를 나타내며 [a, b] 형태
- scores[0]은 완호의 점수
- 0 ≤ a, b ≤ 100,000
- 완호가 인센티브를 받지 못하는 경우 -1을 return
[함수 원형]
int solution(std::vector<std::vector<int>> scores)
{
int answer = 0;
return answer;
}
[풀이]
std::vector<std::vector<int>> scores = {
{2,2},{1,4},{3,2},{3,2},{2,1}
};
int solution(std::vector<std::vector<int>> scores) {
int answer = 1;
std::vector<int> target = scores.at(0);
int target_sum = target.at(0) + target.back();
std::sort(scores.begin(), scores.end(), [&](std::vector<int>& a, std::vector<int>& b) {
if (a.at(0) == b.at(0)) return a.back() < b.back();
return a.at(0) > b.at(0);
});
int MAX_VALUE = -1;
for (auto& score : scores) {
if (MAX_VALUE < score.back()) MAX_VALUE = score.back();
else if (MAX_VALUE > score.back())
{
if (target.at(0) == score.at(0) && target.back() == score.back()) return -1;
continue;
}
if (score.at(0) + score.back() > target_sum) answer++;
}
return answer;
}
- at(0) : 근무 태도 점수 back(): 동료 평가 점수 target : 완호의 점수 배열 target_sum : 완호의 점수 합
- 먼저 근무 태도 점수로 내림차순 정렬 / 점수가 같다면 동료 평가 점수로 오름차순 정렬 수행
- 근무 태도 점수는 내림차순이기때문에 항상 바로 앞 사람보다 낮을 수 밖에 없음
- 따라서 동료 평가 점수를 오름차순으로 정렬한 후 이 값만 체크해서 앞에 나온 점수값보다 낮은지, 높은지를 체크
- 두 점수의 합이 완호의 점수 합보다 크면 석차를 한칸씩 증가시키고 결과 값 return
728x90
반응형
'개발 > 뇌를 말랑하게하는 코테 연습' 카테고리의 다른 글
[프로그래머스 Lv2] 가장 큰 수 (0) | 2022.06.14 |
---|---|
[프로그래머스 Lv2] 다음 큰 숫자 (0) | 2022.06.14 |
[프로그래머스 Lv2] 뉴스 클러스터링 (0) | 2022.06.14 |
[프로그래머스 Lv2] 124 나라의 숫자 (0) | 2022.06.14 |
[프로그래머스 Lv1] 실패율 (0) | 2022.06.07 |