문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12987
코딩테스트 연습 - 숫자 게임
xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로
programmers.co.kr
풀이 - 다른 블로그 참고
- 혹시나 될까 싶어서 순열로 모든 경우의 수를 확인하여 최댓값을 구하는 코드 작성
- 시간 초과 ㅠㅠ
-
다른 풀이# 시간 초과 코드 from itertools import permutations def solution(A, B): n = len(A) answer = -1 permute = list(permutations(B,n)) for team in permute: result = 0 for a, b in zip(A,team): if a < b : result += 1 answer = max(answer, result) return answer
- A의 순서를 고려할 필요없이, A의 각 원소에 따라 대응되는 B의 원소 순서로 배열하면 됨.
- A와 B를 내림차순으로 정렬한다.
- A의 최댓값부터 비교한다.
- A의 값이 B의 최댓값보다 크거나 같으면 이길 수 있는 숫자가 없다는 것이므로 다음 A의 값으로 넘어간다.
- 작으면 이길 수 있는 숫자가 있다는 것이므로 점수를 하나 증가시키고, B[0] 값을 삭제한다.
def solution(A, B):
answer = 0
# 내림차순으로 정렬
A.sort(reverse= True)
B.sort(reverse = True)
# 최댓값부터 비교
for a in A:
# a의 값이 B의 최댓값보다 크면 이길 수 있는 수가 없다는 것이므로 다음 수로 넘어감
if a >= B[0]:
continue
# a의 값이 B의 최댓값보다 작으면 이길 수 있는 수가 있다는 것이므로 점수 +1, B의 최댓값 사용했으니 삭제
else:
answer += 1
del B[0]
return answer
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level3] 멀리 뛰기 -python (0) | 2022.01.13 |
---|---|
[프로그래머스][level3] 스티커 모으기(2) -python (0) | 2022.01.13 |
[프로그래머스][level3] 기지국 설치 -python (0) | 2022.01.11 |
[프로그래머스][level3] 가장 긴 팰린드롬 - python (0) | 2022.01.11 |
[프로그래머스][level3] 섬 연결하기 - python(크루스칼 알고리즘) (0) | 2022.01.11 |