본문 바로가기

개발/algorithm

[프로그래머스][level3] 숫자 게임 -python

문제 링크

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의 원소 순서로 배열하면 됨. 
    1. A와 B를 내림차순으로 정렬한다.
    2. A의 최댓값부터 비교한다. 
      1. A의 값이 B의 최댓값보다 크거나 같으면 이길 수 있는 숫자가 없다는 것이므로 다음 A의 값으로 넘어간다. 
      2. 작으면 이길 수 있는 숫자가 있다는 것이므로 점수를 하나 증가시키고, 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