Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dfs
- 2D슈팅게임
- Ainimation Blending
- 프로그래머스
- dp 알고리즘
- Back Tracking
- 연속 펄스 부분 수열의 합
- 오브젝트 풀링
- Hp바
- Lv2
- pccp 기출문제 3번
- pccp 기출문제 2번
- C#
- 충돌위험 찾기
- Animation State Machine
- Lv.3
- 미로 탈출 명령어
- LayerMark
- 백준 c++ 9375번
- 유니티
- heap tree
- Unity
- pccp 기출문제 1번
- 양과 늑대
- Blend Type
- 플레이어 이동
- CSharp #자료구조
- Algorithm
- 9375번
- 플레이어 방향전환
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.3 인사고과 본문
https://school.programmers.co.kr/learn/courses/30/lessons/152995
1. 정답코드 및 핵심 아이디어, 유의사항
주어진 조건에 따라 주어진 사원 중에 0번 인덱스로 주어지는 완호의 등수를 구하는 문제
- 핵심은 자신을 제외한 모든 사원에 대해서 두 점수가 모두 높은 다른 사원이 있다면 인센티브 대상에서 제외되는 것
-> 주어진 조건을 만족하는 숫자 + 1을 리턴하고 없으면 -1을 리턴하면 됨
0) 주어진 조건
- 주어진 두 개의 점수의 총합으로 순위를 산출
- 단, 모든 사원에 대해서 두 개의 점수가 모두 높은 사원이 있다면 대상에서 제외됨
-> 두 개의 점수가 모두 높으면 총합이 높을 수밖에 없음
1) 연산 최적화
- 완호보다 총합이 높은 사원만 탐색 대상으로 둠
- 탐색 대상인 사원이 인센티브 대상이 되는지 판별할 때, 자신보다 총합이 낮은 사원하고는 비교하지 않음
주석 참조
using System;
using System.Collections.Generic;
public class Solution
{
public class DataClass
{
public int score1; // 근무 태도 점수
public int score2; // 동료 평가 점수
public int total; // 근무 태도 점수 + 동료 평가 점수
public DataClass(int score1, int score2)
{
this.score1 = score1;
this.score2 = score2;
total = score1 + score2;
}
}
public int solution(int[,] scores)
{
int answer = 1; // 현재 완호의 등수를 나타냄
var list = new List<DataClass>(); // 완호보다 총합이 높은 사원을 담을 리스트
DataClass dataClass = new DataClass(scores[0, 0], scores[0, 1]); // 완호의 데이터
// 완호보다 총합이 높은 사원만 추출
for (int i = 1; i < scores.GetLength(0); i++)
if (dataClass.total < scores[i, 0] + scores[i, 1])
list.Add(new DataClass(scores[i, 0], scores[i, 1]));
// 총합 기준 내림차순 정렬
list.Sort((x, y) => (x.total > y.total) ? -1 : 1);
// 총합이 가장 큰 값부터 순서대로 체크
for (int i = 0; i < list.Count; i++)
{
// 완호가 인센티브를 받지 못하는지 체크
if (dataClass.score1 < list[i].score1 &&
dataClass.score2 < list[i].score2)
return -1;
bool isCheck = true; // 해당 사원이 인센티브를 받는지 여부
// 해당 사원보다 총합이 같거나 큰 대상하고만 비교
for (int j = 0; j < i; j++)
{
// 해당 사원이 인센티브를 받지 못하는지 체크
if (list[i].score1 < list[j].score1 &&
list[i].score2 < list[j].score2)
{
isCheck = false;
break;
}
}
// 나보다 높은 순위에 배치될 사원 발견
if (isCheck)
answer++;
}
return answer;
}
}
'CodingTest > Programmers Lv.3' 카테고리의 다른 글
[프로그래머스 C#] Lv.3 순위 (0) | 2024.02.07 |
---|---|
[프로그래머스 C#] Lv.3 이중우선순위큐 (0) | 2024.02.05 |
[프로그래머스 C#] Lv.3 입국심사 (0) | 2024.01.26 |
[프로그래머스 C#] Lv.3 다단계 칫솔 판매 (1) | 2024.01.25 |
[프로그래머스 C#] Lv.3 가장 긴 팰린드롬 (0) | 2024.01.24 |