728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12987?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도
LV3
문제 설명
각 팀원이 숫자를 가지고 있고 상대 팀 팀원과 만나 숫자를 비교했을 때 더 큰 숫자를 내면 승점을 얻는다.
만약 숫자가 같으면 둘다 승점을 얻지 못한다.
A팀의 팀원의 숫자와 출선 순서가 공개 되었을 때 B팀이 얻을 수 있는 최대 승점을 return 해야한다.
접근법
A팀 팀원이 낸 숫자보다 B팀에서 낼 수 있는 숫자가 작은 경우 B팀의 큰 수를 낭비 하지 않고 작은 수를 내고 져야한다.
만약 B팀이 이길 수 있는 숫자라면 A팀 숫자보다 최대한 조금 큰 숫자를 택해야한다. => 내림차순으로 해결 할 수 있다.
- A팀과 B팀의 숫자 크기를 내림차순 정렬한다. => 승점만을 return 하면 되기 때문
- 파이썬의 popleft를 사용하기 위해 deque로 바꿔준다.
- 만약 A팀의 가장 큰 수보다 B팀의 가장 큰 수가 작거나 같으면 어처피 승점을 얻을 수 없기에 작은 수(가장 뒤의 수)를 사용한다.
- 만약 B팀의 가장 큰 수가 A팀의 가장 큰 수보다 크면 B팀이 승점을 얻을 수 있는 경우이기 때문에 가장 큰 수 를 사용하고 승점을 증가 시킨다.(이때 내림차순 정렬 상태이므로 A팀의 그 다음 숫자는 현재 숫자보다 작기 때문에 B팀에서 가장 큰 수를 사용하여 승점을 획득하여도 뒤의 경우에 영향을 미치지 않는다.)
- 승점(answer)을 return 한다.
코드
from collections import deque
def solution(A, B):
answer = 0
A.sort(reverse =True)
B.sort(reverse =True)
a = deque(A)
b = deque(B)
for i in range(len(A)):
if a[0] >= b[0]:
a.popleft()
b.pop()
elif b[0] > a[0]:
a.popleft()
b.popleft()
answer += 1
return answer
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 기지국 설치 by 파이썬 (Python) (0) | 2023.08.12 |
---|---|
[프로그래머스] 단속카메라 by 파이썬 (Python) : 탐욕법 (0) | 2023.08.11 |
[프로그래머스] 단어 변환 by 파이썬 (Python) : DFS (0) | 2023.08.07 |
[프로그래머스] 야근 지수 by 파이썬 (Python) (0) | 2023.08.06 |
[프로그래머스] 최고의 집합 by 파이썬 (Python) (0) | 2023.08.04 |