[TIL] 99클럽 코테 스터디 13일차 TIL - 이진탐색 : 백준 10561 징검다리 문제 풀이 with python

2024. 11. 9. 20:23·Algorithm

Today's keyword : 그리디

그리디 알고리즘(Greedy Algorithm)은 문제를 해결하는 과정에서 매 단계에서 가장 최적이라고 생각되는 선택을 하는 방법입니다. 즉, 현재 상황에서 가장 좋은 선택을 하여 최종적인 해답에 도달하는 방식입니다. 그리디 알고리즘은 다음과 같은 특징을 가지고 있습니다

 

  • 최적 부분 구조: 문제의 최적 해는 부분 문제의 최적 해로 구성됩니다. 즉, 문제를 해결하기 위해 선택한 부분 해가 전체 문제의 최적 해에 기여합니다.
  • 탐욕적 선택 속성: 각 단계에서의 선택이 이후의 선택에 영향을 미치지 않으며, 각 단계에서 최적의 선택을 하여 전체 문제를 해결할 수 있습니다.

 

 

 

 

 
 

이 문제가 왜 그리디 알고리즘에 속하는가?

마도카의 고양이 문제는 그리디 알고리즘의 특성을 잘 보여주는 예입니다. 이 문제에서 그리디 알고리즘이 적용되는 이유는 다음과 같습니다

 

1. 탐욕적 선택 속성:

 

  • 매 단계에서 현재 고양이 수 k를 목표 수 n에 도달하기 위해 가장 최적이라고 생각되는 선택을 합니다.
  • 현재 고양이 수가 목표 수보다 작을 때는 복제 마법을 사용하여 고양이 수를 두 배로 늘리는 것이 최적의 선택입니다. 이는 가능한 한 많은 고양이를 빠르게 늘리는 방법입니다.
  • 현재 고양이 수가 목표 수보다 크거나 같을 때는 생성 마법을 사용하여 고양이 수를 1 증가시키는 선택을 합니다. 이는 목표 수에 도달하기 위한 마지막 단계입니다.

2. 최적 부분 구조:

 

  • 문제의 최적 해는 부분 문제의 최적 해로 구성됩니다. 즉, 현재 고양이 수를 두 배로 늘리는 선택이 이후의 선택에 영향을 미치지 않으며, 각 단계에서의 선택이 전체 문제의 최적 해를 보장합니다.
  • 예를 들어, 현재 고양이 수가 3이고 목표 수가 10이라면, 3을 두 배로 늘려 6으로 만들고, 다시 두 배로 늘려 12로 만드는 것이 최적의 선택입니다. 이후에는 생성 마법을 사용하여 10에 도달할 수 있습니다.

 

 

 

 

📌 문제설명

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

📌 문제풀이

이 문제에서 핵심은 최소한의 행동 횟수로 N마리의 고양이를 만든다는 것입니다. 최소 행동을 하기 위해서는 생성 마법보다 복제 마법을 이용해야 합니다. 복제 마법이 0에서 k마리 이하의 고양이를 자유롭게 복제할 수 있기 때문에 처음 생성 마법을 제외하고는 계속 복제마법을 사용하는 것이 최소한의 행동으로 N마리를 만드는 방법입니다. 

# 백준 : 고양이는 많을수록 좋다 
count = 0 
n = int(input())  # 목표 고양이 수 
k = 0  # 현재 고양이 수 
if n == 0: 
    print(0)
    exit()
    
# 생성 
k += 1
count += 1
while True: 
    if k >= n :
        print(count) 
        break 
    k += k 
    count += 1

1. 변수 초기화 : 행동 횟수 count, 현재 고양이 수 k 를 각각 0으로 초기화를 합니다. 

2. 특별한 경우 (N = 0) 처리 : 목표 고양이 수가 0일 때는 아무것도 행동하지 않으므로 0을 출력합니다. 

3. 생성 마법 사용 : 복제 마법 전 고양이를 1마리 생성합니다. 

4. N에 도달할 때까지 반복문 실행 : 현재 고양이 수 K가 N에 도달할 때까지 현재 고양이 수를 k마리 씩 복제하고 행동 횟수를 추가하는 반복문을 실행합니다. 

5. 결과 출력 : 현재 고양이 수가 N마리 이상이면 최종 행동 횟수를 출력합니다. 복제하는 마리 수가 k 이하로도 가능하기 때문에 이상일 경우에는 마지막에 N마리에 맞춰 복제하면 되기 때문에 N을 넘는 조건만으로도 답을 구할 수 있습니다. 

📌 오늘의 회고 

그리디 알고리즘이 아직 명확하게 와닿진 않지만 조건에 맞춰서 문제를 푸는 방식을 쉽게 느껴진다. 

 

 

 

#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL

'Algorithm' 카테고리의 다른 글

<백준 17070 : 파이프 옮기기 1 > 문제풀이 with python  (2) 2024.11.10
<백준 13335 : 트럭> 문제풀이 with python  (4) 2024.11.09
[TIL] 99클럽 코테 스터디 7일차 TIL - <프로그래머스 : 10561 징검다리> 문제 풀이 with python  (0) 2024.11.04
[SQL] 프로그래머스 고득점 KIT GROUP BY 문제 정답  (0) 2024.02.25
알고리즘 성능 평가 방법 - 빅오 표기법  (0) 2024.02.06
'Algorithm' 카테고리의 다른 글
  • <백준 17070 : 파이프 옮기기 1 > 문제풀이 with python
  • <백준 13335 : 트럭> 문제풀이 with python
  • [TIL] 99클럽 코테 스터디 7일차 TIL - <프로그래머스 : 10561 징검다리> 문제 풀이 with python
  • [SQL] 프로그래머스 고득점 KIT GROUP BY 문제 정답
데이by데이
데이by데이
  • 데이by데이
    Carpe Diem
    데이by데이
  • 전체
    오늘
    어제
    • 분류 전체보기 (42) N
      • AI (5)
      • 데이터분석 (5)
      • MLOps (2)
      • 프로젝트 (2)
      • Personal (5) N
      • Algorithm (12)
      • TIL (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    구간분할
    Rag
    변화점찾기
    ai대학원진학
    시계열데이터분석
    유전알고리즘개념
    change point detection
    유전알고리즘예제
    LLM
    2024 회고
    맹그로브고성
    개발책추천
    change point analysis
    데이터시각화
    #99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    AI
    인과발견
    numpy
    더나은프로그래머되는법
    2025 다짐
    causal discovery
    티스토리챌린지
    pc알고리즘
    회고
    Python
    과학적표기법
    지수표현변환
    이상탐지
    최적화알고리즘
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데이by데이
[TIL] 99클럽 코테 스터디 13일차 TIL - 이진탐색 : 백준 10561 징검다리 문제 풀이 with python
상단으로

티스토리툴바