티스토리 뷰

알고리즘/백준

백준 / 2629 양팔저울 python3

4567은 소수 2021. 2. 11. 17:06

www.acmicpc.net/problem/2629

 

2629번: 양팔저울

첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무

www.acmicpc.net

설이라 본가에 내려왔지만, 노트북을 안 들고 와서 파이썬으로 문제를 풀었습니다. 

(여기 있는 컴퓨터에 C++ 컴파일러 깔기 귀찮아서 파이썬 온라인 컴파일러를 활용했습니다. 허허)

 

위 문제는 추의 무게가 주어지고 구슬의 무게가 주어졌을 때 측정이 가능한지를 묻는 문제입니다.

측정 가능한 경우는 총 3가지 입니다.

 

1. 구슬의 무게가 0인 경우 

아무 추도 안 올리면 됩니다.

 

2. 구슬의 무게가 주어진 추의 합과 같은 경우

추를 조합하여 합한 값과 구슬의 무게가 일치하는 경우입니다.

 

3. 구슬의 무게가 주어진 추의 차로 표현할 수 있는 경우

추의 합으로 표현한 경우에서 어떤 추를 뺀 경우와 구슬의 무게가 일치하는 경우입니다.

 

코드는 다음과 같습니다.

from sys import stdin
# 추 개수
weight_cnt = int(stdin.readline())
# 가벼운 것부터 정렬된 상태
weights = list(map(int,stdin.readline().split()))
# 구슬 개수
ball_cnt = int(stdin.readline())
# 확인할 구슬 무게
balls = list(map(int,stdin.readline().split()))
# 결과
result = []
# 가능한 최대 추의 무게는 sum(weights)
possible = [False for _ in range(sum(weights)+1)]
# 아무것도 안 올린 경우
possible[0] = True

# 더해서 가능한 경우
# check 대신 enumerate(possible[:]) 가능
for w in weights:
    check = possible.copy()
    for idx, chk in enumerate(check):
        if chk==True and possible[idx+w]==False:
            possible[idx+w] = True

# 빼서 가능한 경우
# check 대신 enumerate(possible[:]) 가능
for w in weights:
    check = possible.copy()
    for idx, chk in enumerate(check):
        if (idx-w) >= 0:
            if chk==True and possible[idx-w]==False:
                possible[idx-w] = True

for b in balls:
    if b > sum(weights):
        result.append("N")
    else:
        if possible[b]:
            result.append("Y")
        else:
            result.append("N")
        
for res in result:
    print(res, end=' ')

'알고리즘 > 백준' 카테고리의 다른 글

백준 / 1644 소수의 연속합 C++  (0) 2021.02.14
백준 / 1707 이분 그래프 python3  (0) 2021.02.11
백준 / 오큰수 python  (0) 2021.02.06
백준 / 6588 골드바흐 추측  (0) 2021.02.02
백준 / 11657 타임머신 C++  (0) 2021.02.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함