[백준] 16987 계란으로 계란치기 - 백트래킹, Python

2022. 9. 26. 19:48·Algorithm (PS)
728x90

https://www.acmicpc.net/problem/16987

 

16987번: 계란으로 계란치기

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

www.acmicpc.net

계란치는_법_jpg

2번 과정에서 백트래킹으로 풀어야겠다고 캐치를 할 수 있었다 손에 들고 있는 계란으로 다른 계란 중 하나를 치는데 그게 뭐 바로 옆에 있는 계란일 수도 있고 아닐 수 도 있음 -> 백트래킹 사용해서 계란을 쳤다가 계란을 치기 전으로 다시 back해서 문제를 풀어가야 한다 

 

# https://www.acmicpc.net/problem/16987
n = int(input())
eggs = [] # 계란 배열

for _ in range(n):
    s, w = map(int, input().split())
    eggs.append([s, w])

answer = 0
def break_egg(idx): # 계란 부시기
    global answer
    if idx == n:
        count = 0
        for i in range(n):
            if eggs[i][0] <= 0:
                count += 1
        answer = max(count, answer)
        return
    if eggs[idx][0] <= 0: # 지금 손에 있는 계란이 깨진 경우 -> idx+1
        break_egg(idx+1)
        return
    check = True # 계란이 모두 깨져있는지 확인
    for i in range(n):
        if i == idx: # 현재 계란은 pass
            continue
        if eggs[i][0] > 0:
            check = False
            break

    # 계란이 다 깨져있으면 dfs 종료
    if check:
        answer = max(answer, n - 1)
        return

    # 계란 꺠기
    for i in range(n):
        if i == idx:
            continue
        if eggs[i][0] <= 0:
            continue
        eggs[idx][0] -= eggs[i][1]
        eggs[i][0] -= eggs[idx][1]
        break_egg(idx + 1)
        # back (깨지 않는 경우로 다시 복구)
        eggs[idx][0] += eggs[i][1]
        eggs[i][0] += eggs[idx][1]

break_egg(0) # index 0 부터 (맨 왼쪽 계란부터 치기 시작)
print(answer)
728x90

'Algorithm (PS)' 카테고리의 다른 글

[카카오] 파괴되지 않은 건물 Python/DP/누적합  (0) 2022.09.26
[카카오] 성격 유형 검사하기 Python 풀이  (0) 2022.09.26
카카오 주차요금계산 Python  (0) 2022.09.26
[백준] 14382번 숫자세는 양 Python  (1) 2022.09.26
[백준] 16926 배열돌리기 1 Python  (0) 2022.09.25
'Algorithm (PS)' 카테고리의 다른 글
  • [카카오] 파괴되지 않은 건물 Python/DP/누적합
  • [카카오] 성격 유형 검사하기 Python 풀이
  • 카카오 주차요금계산 Python
  • [백준] 14382번 숫자세는 양 Python
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • 데이터엔지니어링
  • Leetcode
  • BFS
  • 프로그래머스
  • EC2
  • AWS
  • 데이터브릭스
  • 스파크
  • 백트래킹
  • Kubernetes
  • 카카오코딩테스트
  • 빅데이터
  • 알고리즘
  • 운영체제
  • 백준
  • dp
  • 파이썬
  • docker
  • ansible
  • Databricks
  • 쿠버네티스
  • Swift
  • 클라우드
  • python
  • linux
  • dfs
  • 데이터엔지니어
  • SPARK
  • 리눅스
  • 코딩테스트

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 16987 계란으로 계란치기 - 백트래킹, Python
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.