[Python] 백준 1092 배

2021. 12. 13. 21:45·CS/알고리즘 & 문제풀이

문제 링크 : https://www.acmicpc.net/problem/1092

 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net

1. 접근 방법

전형적인 그리디 문제 중 하나라고 생각한다.

해결 방법은 다양하게 고민하기는 했지만, 잘 떠오르지 않아 브루트 포스로 해결했다.

 

2. 풀이 코드

🖥python 코드 링크: https://github.com/mintropy/baekjoon_py/blob/master/1000/1000/1092.py

 

GitHub - mintropy/baekjoon_py

Contribute to mintropy/baekjoon_py development by creating an account on GitHub.

github.com

📕코드 해설

모든 값을 입력 받아 내림차순 정렬했다. 정렬의 방향은 어떤 방향이던 상관 없을 것이라 생각하지만, 내림차순 정렬이 코드 구현이 편할 것 같아서 선택했다.

크레인의 가능한 최대 무게를 넘어선 박스가 있으면 불가능하므로, 처리해주었다.

 

이후, 확인은 모든 크레인에 대해, 모든 박스를 확인하는 방법도 있지만, 조금이라도 탐색을 줄일 수 있지 않을까 생각하여, 각 크레인 별 가능한 최대 무게 박스 인덱스를 저장한 리스트를 기준으로 탐색했다.

그리고, 각 박스를 옮겼다면 그 확인을 개별 리스트를 활용할수도 있지만, 따로 생성하지 않고 기존 박스 무게를 저장한 리스트에서 값을 0으로 바꾸는 방식으로 선택했다.

그러면 다음과 같은 경우의 수로 나뉜다.

① 지금 인덱스의 박스가 아직 옮겨지지 않은 경우, 박스를 옮긴다

② 지금 인덱스의 박스가 옮겨진 경우, 인덱스를 더하며 옮겨지지 않은 박스를 찾는다

③ 만약 인덱스가 전체 박스의 개수 M과 같아지면 더 적거나 같은 무게 제한이 걸린 모든 크레인은 확인하지 않는다(break)

그리고 모든 크레인에 대하여 위의 작업을 몇 회 확인하는지, 즉 크레인의 수 N에 대하여 for문이 호출되는 횟수가 이 문제에서의 정답이 된다.

 

3. 생각 정리

조금 더 고민하더라도, 그리디로 해결하지 못한것은 조금 아쉽게 느껴진다.

그래도 나름 재밌는 방법으로 해결했다고 생각하지만, 내 코드를 조금 더 효율성 높은 코드로 구현할 수 있지 않을까라는 생각은 남는다.

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

[Python] 백준 2671 잠수함식별  (0) 2021.12.17
[Python] 백준 5557 1학년  (0) 2021.12.13
[Python] 백준 22965 k개의 부분 배열  (0) 2021.11.07
[Python] 백준 20302 민트초코  (0) 2021.11.06
[Python] 백준 16884 나이트 게임  (0) 2021.11.06
'CS/알고리즘 & 문제풀이' 카테고리의 다른 글
  • [Python] 백준 2671 잠수함식별
  • [Python] 백준 5557 1학년
  • [Python] 백준 22965 k개의 부분 배열
  • [Python] 백준 20302 민트초코
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    fastapi
    markdown
    카카오
    DRF
    프로그래머스
    브루트포스
    web framework
    회고
    django
    line
    구현
    ps
    Combinatorics
    dfs
    project_zero
    pydantic
    조건분기
    DP
    그리디
    trie
    게임이론
    SSAFY
    코딩테스트
    프로젝트
    Python
    백준
    파이썬
    알고리즘
    bfs
    union-find
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
[Python] 백준 1092 배
상단으로

티스토리툴바