728x90
2108. 통계학
import sys
import collections
n = int(input())
num_list = []
for line in sys.stdin:
num_list.append(int(line))
print(round(sum(num_list)/n))
num_list.sort()
print(num_list[n//2])
fre_dict = dict(collections.Counter(num_list))
fre_list = list(fre_dict.items())
fre_list.sort(key = lambda x: x[1], reverse = True)
if len(fre_list) > 1:
if fre_list[0][1] == fre_list[1][1]:
print(fre_list[1][0])
else:
print(fre_list[0][0])
else:
print(fre_list[0][0])
print(max(num_list) - min(num_list))
평균값, 중간값, 최빈값, 범위를 구하는 간단한 문제. 라고 생각했는데 최빈값이 여러개일 경우 두번째로 작은 수를 출력해야 한다. 다른건 한두줄로 끝났고 최빈값도 금방 구하지만 시간 제한 때문에 collections 라이브러리를 써야 했고 이 라이브러리가 익숙치 않아 고생 좀 했다. collections의 Counter 메서드를 썼을 때 각 숫자와 숫자의 개수가 딕셔너리 형태로 반환된다. 키 기준 오름차순으로 정렬되므로 딕셔너리를 리스트로 변환 후 첫번째와 두번째 요소의 value가 같을 때 두번째의 키를, 아니면 첫번째의 키를 출력하도록 했다.
1874. 스택 수열
n = int(input())
num_list = []
for i in range(n):
num_list.append(i+1)
stack = []
seq = []
no = False
for i in range(n):
target = int(input())
if target not in stack and target not in num_list:
no = True
break
elif target in stack:
while target in stack:
seq.append('-')
stack.pop()
elif target not in stack:
while target in num_list:
seq.append('+')
stack.append(num_list.pop(0))
seq.append('-')
stack.pop()
if no:
print('NO')
else:
for i in seq:
print(i)
실버2 문제인데 20분도 안돼서 푼 것 같다(뿌듯). 물론 Pypy를 썼지만... 숫자 list와 스택에 타겟값이 있는지를 계속 확인하면서 push와 pop을 반복하고 실행할 때마다 +와 -를 저장했다. 이제 나름 스택에 대한 개념이 익숙해진 것 같다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준]230207 문제풀이 (0) | 2023.02.07 |
---|---|
[백준]230206 문제풀이 (0) | 2023.02.06 |
[백준]230203 문제풀이 (0) | 2023.02.04 |
[백준]230202 문제풀이 (2) | 2023.02.02 |
[백준]230131 문제풀이 (0) | 2023.01.31 |
댓글