A. Eshag Loves Big Arrays #722 Div.2

LONGNEW·2021년 7월 6일
0

CP

목록 보기
16/155

https://codeforces.com/contest/1529/problem/A
시간 1초, 메모리 256MB

input :

  • t (1≤t≤100)
  • n (1≤n≤100)
  • a1,a2,…,an (1≤ai≤100)

output :

  • For each test case print a single integer — the maximum number of elements Eshag can delete from the array a.
    각 테스트 케이스에서의 정수를 출력하시오. 이 때 a배열에서 제거한 원소들의 개수를 출력하시오.

조건 :

  • choose some subsequence of a and delete every element from it which is strictly larger than AVG, where AVG is the average of the numbers in the chosen subsequence.
    부분문자열을 고른 이후에 이 배열의 평균을 구한 후 평균보다 원소들을 삭제한다.

더 이상 삭제가 불가능 하려면 남아있는 원소들의 값이 동일 해야 한다. 원소들의 범위는 1 ~ 100 까지니까 1들 혹은 가장 작은 숫자들만 남으면 위의 행동을 그만 하면 된다.

6
6 4 1 1 4 1
이 입력 될 때 이 수를 오름차순으로 정렬 하면 1 1 1 4 4 6이 된다. 그리고
부분 문자열을
4 6 을 고르게 되면 6을 삭제 하고
1 4 4 를 고르면 4를 삭제할 수 있다. 이와 같은 방식으로 수행을 하는 것이다.

사실 그냥 가장 작은 숫자들의 개수를 세고 전체 길이에서 빼줘도 된다.

import sys
 
t = int(sys.stdin.readline())
for i in range(t):
    n = int(sys.stdin.readline())
    data = list(map(int, sys.stdin.readline().split()))
    data.sort()
 
    cnt, ans = 0, 0
    prev = data[0]
 
    for item in data:
        if prev != item:
            prev = item
            cnt += 1
 
        if cnt > 0:
            ans += 1
 
    if cnt == 0:
        print(0)
    else:
        print(ans)

모든 개수를 체크하는 방법

import sys
 
t = int(sys.stdin.readline())
for i in range(t):
    n = int(sys.stdin.readline())
    data = list(map(int, sys.stdin.readline().split()))
    data.sort()
 
    cnt = 0
    prev = data[0]
 
    for item in data:
        if prev != item:
            break
        cnt += 1
 
    print(len(data) - cnt)

가장 작은 숫자의 수를 이용해 개수를 구하는 방법

0개의 댓글