Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 특정 시각 t에 경기장에 서 있는 관중 수 구하기

경기장에는 총 n명의 관중이 있으며, 각 관중은 1부터 n까지 번호가 매겨져 있습니다. 이때 다음과 같은 규칙에 따라 관중들이 일어나고 앉는다고 가정해 보겠습니다.

  • 시각 t1에 첫 번째 관중이 일어섭니다.
  • 시각 t2에 두 번째 관중이 일어섭니다.
  • 시각 tk에 k번째 관중이 일어섭니다.
  • 시각 tk+1에 (k+1)번째 관중이 일어서고, 동시에 첫 번째 관중은 앉습니다.
  • 시각 tk+2에 (k+2)번째 관중이 일어서고, 두 번째 관중은 앉습니다.
  • 시각 tn에 n번째 관중이 일어서고, (n−k)번째 관중은 앉습니다.
  • 시각 tn+1에 (n+1−k)번째 관중이 앉습니다.
  • 시각 tn+k에 마지막으로 n번째 관중이 앉습니다.

예제 이해하기

예를 들어 입력이 n = 11, k = 6, t = 4라고 가정해 봅시다. 시각 t1에 첫 번째 관중이 일어서고, t2에 두 번째, t3에 세 번째, 마지막으로 t4에 네 번째 관중이 일어섭니다. 따라서 시각 t=4에 서 있는 관중은 총 4명이므로 출력값은 4가 됩니다.

해결 방법

이 문제는 세 가지 경우로 나누어 간단한 조건문으로 해결할 수 있습니다.

  • t ≤ k인 경우: 아직 일어난 사람이 앉지 않았으므로 t를 그대로 반환합니다.
  • k < t ≤ n인 경우: 모든 k명의 관중이 서 있는 상태이므로 k를 반환합니다.
  • t > n인 경우: 일어난 관중들이 하나씩 앉기 시작하는 단계입니다.
    • res := t − n (앉은 사람 수)
    • res := k − res (아직 서 있는 사람 수)
  • 마지막으로 res를 반환합니다.

파이썬 구현 코드

다음 코드를 통해 더 자세히 이해해 보겠습니다.

def how_many_stand(n, k, t):
    if t <= k:
        return t
    elif t <= n:
        return k
    else:
        res = t - n
        res = k - res
        return res

n = 11
k = 6
t = 4
print(how_many_stand(n, k, t))

입력

11, 6, 4

출력

4

위 코드에서 함수 how_many_stand는 현재 시각 t와 전체 관중 수 n, 동시에 설 수 있는 최대 인원 k를 받아 해당 시점에 서 있는 관중의 수를 계산합니다. 시간 복잡도는 O(1)로, 어떤 큰 값이 들어와도 즉시 결과를 얻을 수 있다는 장점이 있습니다.