기록하는삶
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 15954번 _ 인형들 본문
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 15954번 _ 인형들
mingchin 2022. 12. 30. 13:20https://www.acmicpc.net/problem/15954
[문제]
카카오프렌즈 스토어에서는 N종류의 인형을 팔고 있다. N개의 인형들 중에서는 잘 팔리는 인형과 그렇지 않은 인형들이 섞여 있어서 잘 팔리는 인형은 상대적으로 사람들이 많이 볼 수 있는 곳에 배치하고, 잘 팔리지 않는 인형은 상대적으로 사람들이 적게 볼 수 있는 곳에 배치한다. 그러므로 배치된 곳이 가까운 두 인형은 상대적으로 판매량이 비슷하다고 할 수 있다.
좋은 배치를 정하기 위해서 어느 날, 여러 명의 사람들을 대상으로 인형의 선호도를 조사하였다. 조사 결과 각 인형에 대해서 선호하는 사람의 수를 모두 구하였고, 그에 따라 인형의 배치를 정하려고 한다.
카카오프렌즈 스토어를 관리하는 브라이언은 어떠한 특정한 곳에 인형들을 배치하고자 하는데, 그곳에 인형들을 선택하는 방법은 다음과 같다:
- 먼저 비슷한 인형이 가깝게 위치하도록 서로 다른 N개의 인형을 종류당 한 개씩 일렬로 배치한다.
- 그 후, 선호하는 사람의 수의 표준편차가 최소가 되는, K개 이상의 연속된 위치에 있는 인형들을 선택하여 그들을 같은 곳에 배치한다.
위의 방법으로 인형들을 선택했을 때, 선택된 인형들의 선호하는 사람의 수의 표준편차를 구하여라.
N개의 수 a1, a2, …, aN이 주어져 있을 때, 통계학에서 (산술) 평균은 (a1 + a2 + … + aN) / N 으로 정의한다. 이를 m으로 정의하자. 또한, 분산은 ((a1 - m)2 + (a2 - m)2 + … + (aN - m)2) / N으로 정의하고, 표준 편차는 분산의 음이 아닌 제곱근으로 정의한다.
[입력]
첫 번째 줄에 N과 K가 주어진다. N은 1 이상 500 이하의 정수이고, K는 1 이상 N 이하의 정수이다.
두 번째 줄에는 N개의 정수가 입력되며, 이는 인형이 일렬로 나열된 순서대로 인형을 선호하는 사람의 수이다. 각 수는 모두 106 이하의 음이 아닌 정수이다.
[출력]
선택된 인형들을 선호하는 사람의 수의 표준 편차를 출력한다. 출력한 결과와 실제 답을 비교하였을 때의 상대/절대 오차가 10-6 이하인 경우에만 정답으로 인정한다.
[아이디어]
1) "K개 이상"의 연속된 인형들,,
2) 시간 복잡도를 줄이기 위해 slicing과 mean, len 계산을 점화식 형태로 만들어야 하는지를 고민했었는데, Pypy로 제출 시에는 그냥 통과된다.
n, k = map(int, input().split())
num = list(map(int, input().split()))
ans = float('inf')
for i in range(n-k+1):
for j in range(n-k-i+2):
tmp = num[i:i+k+j]
l = len(tmp)
m = sum(tmp)/ l
ans = min(ans, (sum(map(lambda x:(x-m)**2, tmp))/l)**0.5)
print(ans)
조건을 놓치지 않고 읽는 것도 실력,,
'백준(Python) > 브루트포스 알고리즘(완전탐색)' 카테고리의 다른 글
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 2531번 _ 회전 초밥 (0) | 2023.01.10 |
---|---|
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 14658번 _ 하늘에서 별똥별이 빗발친다 (0) | 2023.01.09 |
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 1111번 _ IQ Test (0) | 2022.04.02 |
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 16637번 _ 괄호 추가하기 (0) | 2022.04.01 |
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 1759번 _ 암호 만들기 (0) | 2022.03.31 |