[백준 알고리즘] 16987번: 계란으로 계란치기 (Python / 파이썬)

2024. 1. 28. 18:20·알고리즘/백준
문제 링크
 

16987번: 계란으로 계란치기

원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱

www.acmicpc.net

 

문제 접근

치는 계란과 맞는 계란을 잘 다뤄야 한다.

치는 계란은 항상 왼쪽 첫 번째 계란이고, 이 계란이 깨지면 다음 계란이 치는 계란이 된다.

재귀를 하면서 배열 자체에서 깨진 계란을 삭제해 버리면 복잡해지므로 알고리즘 내에서 조건으로 깨짐 여부를 체크하고 그에 따라 처리해준다.

 

 

정답 코드
# 16987번: 계란으로 계란치기

import sys


def count(eggs):
    cnt = 0
    for i in eggs:
        if i[0] <= 0:
            cnt += 1
    return cnt


def func(index, cur_eggs):
    global answer
    
    if index == n:
        #카운트 체크
        answer = max(answer, count(cur_eggs))
        return

    left_egg = cur_eggs[index]
    left_w = left_egg[1]

    # 현재 계란 깨졌다면 다음 계란 들기
    if left_egg[0] <= 0:
        func(index + 1, cur_eggs)
    else:
        is_all_broken = True
        for i in range(n):
            if i != index and cur_eggs[i][0] > 0:
                is_all_broken = False
                right_egg = cur_eggs[i]
                right_w = right_egg[1]

                # 계란 치기
                left_egg[0] = left_egg[0] - right_w
                right_egg[0] = right_egg[0] - left_w
                # 재귀 함수 호출
                func(index + 1, cur_eggs)
                # 복구
                left_egg[0] = left_egg[0] + right_w
                right_egg[0] = right_egg[0] + left_w

        if is_all_broken:
            answer = max(answer, count(cur_eggs))
            return


n = int(sys.stdin.readline().rstrip())
eggs = list(list(map(int, sys.stdin.readline().split())) for _ in range(n))

answer = 0
func(0, eggs)

print(answer)

저작자표시 (새창열림)

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

[백준 알고리즘] 1992번: 쿼드트리 (Python / 파이썬)  (0) 2024.02.19
[백준 알고리즘] 1926번: 그림 (Python / 파이썬)  (1) 2024.02.19
[백준 알고리즘] N과 M (12) (Python / 파이썬)  (0) 2024.01.28
[백준 알고리즘] N과 M (11) (Python / 파이썬)  (0) 2024.01.28
[백준 알고리즘] 1759번: 암호 만들기 (Python / 파이썬)  (2) 2024.01.25
'알고리즘/백준' 카테고리의 다른 글
  • [백준 알고리즘] 1992번: 쿼드트리 (Python / 파이썬)
  • [백준 알고리즘] 1926번: 그림 (Python / 파이썬)
  • [백준 알고리즘] N과 M (12) (Python / 파이썬)
  • [백준 알고리즘] N과 M (11) (Python / 파이썬)
gyujh
gyujh
개발 공부 블로그
  • gyujh
    규
    gyujh
  • 전체
    오늘
    어제
    • 분류 전체보기 (86)
      • Backend&DB (3)
      • CS (5)
        • 컴퓨터구조 (1)
        • 소프트웨어공학 (4)
      • JavaScript (2)
      • Git (2)
      • 알고리즘 (73)
        • 개념 (3)
        • 백준 (70)
      • Projects (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스택
    시간초과
    숏코딩
    답
    에러
    재귀
    런타임
    알고리즘
    정답
    풀이
    딕셔너리
    구현
    BOJ
    백준
    답안
    algorithm
    프로그래머스
    정렬
    너비우선탐색
    문자열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
gyujh
[백준 알고리즘] 16987번: 계란으로 계란치기 (Python / 파이썬)
상단으로

티스토리툴바