3/8 스터디 문제

hyejun sang·2022년 3월 8일
0

알고리즘

목록 보기
4/28
post-thumbnail

1번 문제.
https://www.acmicpc.net/problem/13164
-> 행복 유치원

1번 문제 풀이 코드

① 처음 생각했던 방식

import sys

n, k = map(int, sys.stdin.readline().split())
kids = list(map(int, sys.stdin.readline().split()))

diff = []
for i in range(n-1) :
    diff.append(kids[i+1] - kids[i])
diff.sort()

cost = 0
for j in range(k-1):
    cost += diff[j]

print(cost)

혼자 검토하다 생각이 든 것이 다른 숫자들을 이용해서 하면 결과가 원하는대로 나오지 않았다...
만약 조가 지금처럼 5명이 3조가 아니라 2조라면? 6명이 2조라면? 이런식으로 생각해보며.. 아래와 같이 변경했음

② 인원수에서 조의 개수를 뺀 수만큼 더함

import sys

# 유치원에 있는 원생 수와 나누려고 하는 조의 개수
n, k = map(int, sys.stdin.readline().split())
# 입력받은 아이들의 키
kids = list(map(int, sys.stdin.readline().split()))

# 아이들의 키 차이 초기화하고,
# 키 차이를 최소화 하기 위해 차이를 정렬함
diff = []
for i in range(n-1) :
    diff.append(kids[i+1] - kids[i])
diff.sort()

cost = 0
for j in range(n-k):
    cost += diff[j]

print(cost)

2번 문제.
https://www.acmicpc.net/problem/2437
-> 저울

2번 문제 풀이 코드

7개 추 : 1 1 2 3 6 7 30 이렇게 존재할 때,
값이 1씩 올라가면서 더해진 값이 추의 조합으로 더해질 수 있다면 계속 진행하고, 1씩 올라간 값이 추의 조합으로 더해진 값보다 작으면 멈춰서 값을 확인한다.
3개 추 : 1 2 3 -> 7
6개 추 : 1 2 2 3 5 6 -> 20
위의 예시로도 넣어봤을 때 값이 제대로 나오면 맞을것임
그렇지 않다면 다시 생각해볼 것.
(손 계산으로 저렇게 나온다는 것을 확인해봄..)

import sys

# 저울추 개수
n = int(sys.stdin.readline())
# 저울추 무게
wt = list(map(int,sys.stdin.readline().split()))
wt.sort()

# 저울추 합
sumWt = 0
# 측정할 수 없는 무게 최소값
minWt = 0
for i in range(n) :
    if sumWt+1 >= wt[i] :
        sumWt += wt[i]

    else :
        break
        
minWt = sumWt + 1
print(minWt)

0개의 댓글