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 | 31 |
Tags
- 알람 시스템
- AWS
- 좋은 코드 나쁜 코드
- prg 패턴
- gRPC
- BFS
- docker
- 결제서비스
- 쿠키
- 프로그래머스
- 카카오
- branch 전략
- piplining
- 수신자 대상 다르게
- 깊게 생각해보기
- 트랜잭샨
- 코드 계약
- 구현
- 누적합
- 이분탐색
- 셀러리
- 백준
- 검색어 추천
- 레디스 동시성
- spring event
- 완전탐색
- 객체지향패러다임
- jwt 표준
- 숫자 블록
- 디버깅
Archives
- Today
- Total
코딩관계론
[프로그래머스] 인사고과 본문
반응형
[문제 설명]
인센티브를 받는 사람 중 완화가 몇 등인지 구하는 문제였다.
인센티브를 받을 수 있는 조건은 다음과 같다.
- 사원.근무태도 >= 사원들.근무태도 or 사원.동료평가 >= 사원들.동료평가
둘 중에 하나라도 높은 것이 있다면 인센티브를 받을 수 있다
[해결 방법]
주어진 예시(sources = [[x, y], [x,y]...])를 도식화 시키면 아래와 같은 모습이 나타나게 된다. 여기서 빨간색 부분은 인센티브를 받을 수 없는 사람들의 영역을 나타낸다.
아래의 사진을 보면 두 가지의 특징을 획득할 수 있다
- x의 크기 순서 및 만약 x의 크기가 같으면 y 값이 작은 사람부터 인센티브의 여부를 우선적으로 판별할 수 있다.
- x가 0으로 가까워 질 수록 y 값이 커지는 특징을 확인할 수 있다. 왜냐하면 포함되지 않기 위해선 y가 커져야만 하기 때문이다.
그럼 첫 번째 특징으로 인해 x는 내림차순 y는 오름차순으로 정렬을 수행한다면 인센티브 여부를 판별할 수 있게 된다.
두 번째 특징으로 max_height를 기록하면서 max_height보다 크거나 같을 때 인센티브를 받을 수 있다고 기록하면 해당 문제를 수월하게 해결할 수 있다.
[해결 과정에서 발생한 문제와 해결방법]
- 순위를 구하기 위해 인센티브를 받을 수 있는 사람의 점수를 배열에다 저장하고, 그 중에 타겟 값이 있는지 비교했다. 하지만 아래와 같은 방법으로는 정답을 획득할 수 없었다. 왜냐하면 score의 합은 같고 x, y의 좌표가 다를 경우가 존재했기 때문이다.
sum = 0
for score in get_incentive_scores:
if score == target:
return score의 index
return -1
[정답 코드]
def solution(scores):
target_score = sum(scores[0])
target_x, target_y = scores[0]
scores.sort(key=lambda s: (-s[0], s[1]))
max_height, answer = 0, 1
alived_score = []
for score in scores:
x, y=score
if target_x < x and target_y < y:
return -1
if max_height <= y:
if target_score < x + y:
answer += 1
max_height = y
return answer
if __name__ == "__main__":
score = [[2,2],[1,4],[3,2],[3,2],[2,1]]
print(solution(scores=score))
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 선입선출 (0) | 2023.03.24 |
---|---|
[프로그래머스] 부대복귀 (0) | 2023.03.23 |
[프로그래머스] 수 찾기 (0) | 2023.03.08 |
[카카오블라인드] 택배 배달과 수거하기 (0) | 2023.01.29 |
[카카오 2023 블라인드] 미로탈출명령어 (0) | 2023.01.19 |