본문 바로가기
알고리즘 백준문제풀기

백준 python 2108번 통계학 / 1966번 프린터큐 / 1158번 요세푸스

by deeplearningkakao 2022. 2. 8.
반응형

백준 python 2108번 통계학 

입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

출력
첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.

둘째 줄에는 중앙값을 출력한다.

셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.

넷째 줄에는 범위를 출력한다.

 

Python
import sys
 
loop = int(input())
vals = []
for _ in range(loop):
    vals.append(int(sys.stdin.readline()))
vals.sort()
 
def average(vals):
    return round(sum(vals)/len(vals))
 
def center(vals):
    return vals[len(vals)//2]
 
def freq(vals):
    import collections
    tmp = collections.Counter(vals).most_common()
 
    if len(tmp) > 1:
        if tmp[0][1] == tmp[1][1]:
            return tmp[1][0]
        else:
            return tmp[0][0]
    else:
        return tmp[0][0]
 
def range(vals):
    return vals[len(vals)-1] - vals[0]
 
print(average(vals))
print(center(vals))
print(freq(vals))
print(range(vals))

 

반응형

백준 python 1966번 프린터큐

입력
첫 줄에 테스트케이스의 수가 주어진다. 각 테스트케이스는 두 줄로 이루어져 있다.

테스트케이스의 첫 번째 줄에는 문서의 개수 N(1 ≤ N ≤ 100)과, 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue에서 몇 번째에 놓여 있는지를 나타내는 정수 M(0 ≤ M < N)이 주어진다. 이때 맨 왼쪽은 0번째라고 하자. 두 번째 줄에는 N개 문서의 중요도가 차례대로 주어진다. 중요도는 1 이상 9 이하의 정수이고, 중요도가 같은 문서가 여러 개 있을 수도 있다.

출력
각 테스트 케이스에 대해 문서가 몇 번째로 인쇄되는지 출력한다.

 

Python
import sys
 
loop = int(input())
 
for _ in range(loop):
    many, idx = map(int, sys.stdin.readline().split())
    arr = list(map(int, sys.stdin.readline().split()))
 
    watch = idx                 
    count = 0
    while True:
        maxPri = max(arr)       
        if arr[0] >= maxPri:
            count+=1            
            if watch == 0:     
                print(count)   
                break
            else:
                arr.pop(0)      
        else:
            arr.append(arr.pop(0))  
 
        if 0 == watch:      
            watch = len(arr)-1
        else:
            watch -= 1

 

 

백준 python 1158번 요세푸스 

입력
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

출력
예제와 같이 요세푸스 순열을 출력한다.

 

Python
count, num = map(int, input().split())
 
josephus = [i for i in range(1, count+1)]
 
result = []
seqNo = num-1
while len(josephus):
    if seqNo >= len(josephus):
        seqNo = seqNo % len(josephus)
    else:
        result.append(str(josephus.pop(seqNo)))
        seqNo += (num-1)
 
print("<", ", ".join(result), ">", sep='')
반응형

댓글