Programmers

[Lv.3] 숫자게임

dev-minchur 2025. 1. 11. 15:02

프로그래머스의 "숫자게임" 문제는 A,B 두팀에서 B의 팀이 최대 승점을 구하는 문제입니다. 각각 두팀은 무작위로 자연수를 하나씩 부여 받고, A팀의 출전 순서는 B팀에게 공개를 합니다.

문제 분석

  1. 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.
  2. 각 사원은 딱 한 번씩 경기를 합니다.
  3. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.
  4. 만약 숫자가 같다면 누구도 승점을 얻지 못합니다.

해결 방법

A,B 두 리스트를 정렬을 하여 B의 값이 큰 경우에만 승점을 포함시키고 인덱스 번호를 증가 시켜 승점을 계산합니다.

1차 문제 풀이 (틀림)

def solution(A, B):
    sort_a, sort_b = sorted(A), sorted(B)
    answer = 0
    index_a = 0

    for b in sort_b:
        if index_a < len(sort_a) and sort_a[index_a] < b:
            answer += 1
            index_a += 1
        elif index_a < len(sort_a) and sort_a[index_a] == b:
            index_a += 1
    return answer

2차 문제풀이 (정답)

def solution(A, B):

    A.sort()
    B.sort()

    points = 0
    j = 0

    for a in A:
        while j < len(B) and B[j] <= a:
            j += 1
        if j < len(B):
            points += 1
            j += 1

    return points
  1. A와 B를 정렬합니다.
  2. 점수와 B팀의 인덱스값 따로 변수로 설정합니다.
  3. A팀의 각 숫자에 대해 B팀의 적절한 숫자를 찾습니다.
  4. B팀의 현재 숫자가 A팀의 숫자보다 작거나 같은 경우, 다음 숫자를 찾습니다.
  5. B팀의 현재 숫자가 A팀의 숫자보다 큰 경우, 점수를 얻습니다.