프로그래머스 [Level2] 퍼즐게임 ( binary_search 알고리즘)

2025. 11. 4. 19:33·Coding Test/Binary_Search

문제

#include <string>
#include <vector>
#include <set>

using namespace std;

bool calculate_time(int _mid, vector<int> _diffs, vector<int> _times, long long limit)
{
    // 이게 true면 start 땡기기
    
    long long i_TotalTime = 0; 
    
    for(int i=0; i<_times.size(); i++)
    {
        if(_mid >= _diffs[i])
        {
          i_TotalTime += _times[i];    
        }
        
        else
        {
            i_TotalTime += ((_times[i] + _times[i-1]) * (_diffs[i] - _mid) +_times[i]);
            //(time_cur + time_prev) *  (diff-level) + time_cur 
        }
        
        if(i_TotalTime > limit)
            return false; // start 값 = mid + 1  
    }
    
    return true; // end 값 = mid-1; 
}



int solution(vector<int> diffs, vector<int> times, long long limit)
{
    int answer = 0;

    // 조건 1. diff <= level이면  퍼즐을 틀리지않고 time_cur만큼의 시간을 사용해 해결 
    // -> timeCur  만큼 더해주기 
    // 조건 2  diff >  level 이면  diff-level 만큼 틀리고 틀릴 때마다 time_cur 만큼의 시간을 사용하며   
    // 추가로 time_prev 만큼의 시간을 사용해 이전 퍼즐을 다시 풀고 와야한다. 
    // -> 틀린횟수  :  diff-level 
    // -> 총 total :  (time_cur + time_prev) *  (diff-level) + time_cur 

    // 조건1과 조건2가 limit보다 작게 나오는 것 의 level의 최솟값을 구해라. 

    int startLevel = 1; 
    int endLevel = 100000;
    int mid = 0;  
   
    
    while(startLevel <= endLevel)
    {
        mid = (startLevel + endLevel ) / 2;
        
        if(calculate_time(mid, diffs, times,limit))
        {
            endLevel = mid-1; 
        }
        
        else
        {
            startLevel = mid+1; 
        }
        
    }
    
    answer = startLevel; 
    
    
    
    return answer;
}

 

문제 접근 순서.

 

1. 우선 최솟값의 Level을 구하는 것이므로 Level의 범위부터 생각 ( 1<= Level <= 100,000) 으로 설정

 

2. Level에 따라 결과값이 다르므로 해당 Level을 탐색하기 가장 빠르고 복잡도가 낮은 이진탐색 생각 

 

3. Limit보다 이내에 해야 하니깐  Total_Time < Limit 구조여야 하니깐 이진탐색 조건문이 해제될 때 start 값을 return 해야함

   그래야 Limit보다 작은 값이 나오는 큰 레벨이므로. 

'Coding Test > Binary_Search' 카테고리의 다른 글

백준 2805 나무자르기 [Binary_Search 알고리즘]  (0) 2026.02.23
[Level3] 프로그래머스 입국심사 (Binary_search)  (0) 2025.11.10
백준 1624 랜선 자르기 ( binary_search)  (0) 2025.11.05
'Coding Test/Binary_Search' 카테고리의 다른 글
  • 백준 2805 나무자르기 [Binary_Search 알고리즘]
  • [Level3] 프로그래머스 입국심사 (Binary_search)
  • 백준 1624 랜선 자르기 ( binary_search)
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hash
    GameProgramming
    CodingTest
    Unreal Engine
    blueprint
    Game Programming
    Unreal
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
프로그래머스 [Level2] 퍼즐게임 ( binary_search 알고리즘)