새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 2437 저울

by 언호 2022. 8. 19.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

처음에 비트마스킹을 이용하여 각 자릿수의 비트가 무게 하나로 생각하여 불가능한 무게를 구하는 방식을 이용하였습니다.

불가능한 무게를 구하기 위해서는 1비트씩 오른쪽으로 시프트 과정을 거치며 AND 연산을 통해 1의 여부 판별을 진행하였습니다.

그러나 입력에 따라 불가능한 무게를 탐색하는 과정이 매우 많이 필요하였고 그로 인해 시간 초과가 발생하였습니다.

 

추를 가장 가벼운 것부터 정렬하였고, 불가능한 최소 무게보다 작거나 같은 추가 있다면, 해당 무게는 측정이 가능하므로 다음 불가능한 무게로 갱신하였습니다.

그리고 불가능한 무게보다 큰 무게의 추가 나온다면 해당 무게는 측정이 불가능하므로 탐색을 종료하였습니다.

2) 알고리즘

  • 정렬
  • 그리디

3) 풀이 코드

사용 언어 - Python

import sys
sys.stdin = open('input.txt')

# 입력데이터
N = int(sys.stdin.readline())
weights = sorted(list(map(int, sys.stdin.readline().split())))

# 불가능한 최소 무게
answer = 1

# 작은 무게의 추부터 시작
for w in weights:
    # 불가능한 최소 무게보다 현재 추가 더 무거우면 종료
    if answer < 1 << w-1:
        break

    # 불가능한 최소 무게 증가
    answer <<= w

print(len(bin(answer))-2)

🔗 문제 링크

- https://www.acmicpc.net/problem/2437

 

2437번: 저울

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 1525 퍼즐  (0) 2022.08.24
[백준] 1011 Fly me to the Alpha Centauri  (0) 2022.08.21
[백준] 4195 친구 네트워크  (0) 2022.08.18
[백준] 1944 복제 로봇  (0) 2022.08.17
[백준] 1700 멀티탭 스케줄링  (0) 2022.08.16

댓글