[ 프로그래머스 PCCP 기출문제 2번 ] 퍼즐 게임 챌린지 (C++) - 이분 탐색

2024. 9. 24. 11:28· 문제풀이/알고리즘 문제 풀이
목차
  1. 🔗 문제 링크
  2. 💡 문제 풀이 및 해석
  3. ⭐️ 정답 코드 및 설명
  4. 🤔 문제 후기
728x90

🔗 문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


💡 문제 풀이 및 해석

  1. 숙련도를 구해야 하는데, 난이도와 시간의 배열이 상당히 크다.
  2. 숙련도가 어느 정도일지 예상이 안가고, 예제를 보니 1,2,3, ... 이런식으로 가면 최악의 시간 만족도를 충족시킬 수 없다.
  3. 여기서는 하나씩 체크하는 방식이 아닌 범위를 잡고 좁혀들어가는 이분 탐색 방식이 어울리는 것을 알 수 있다.
  4. 숙련도와 level에 대해서는 문제에서 설명한 방식 그대로 구현한 것이여서 생략하겠습니다.

⭐️ 정답 코드 및 설명

#include <string>
#include <vector>

using namespace std;

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

    if (diffs[0] > level) answer += (diffs[0] - level + 1) * times[0];
    else answer += times[0];

    for (int i = 1; i < diffs.size(); i++) {
        int diff = diffs[i], time = times[i], time_prev = times[i - 1];
        if (diff > level) answer += (diff - level) * (time_prev + time) + time;
        else answer += time;
    }

    return answer > limit;
}

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

    int left = 0, right = 9876543210;

    while (left + 1 < right) {
        int mid = (left + right) / 2;
        if (puzzle(diffs, times, limit, mid)) left = mid;
        else right = mid;
    }

    return right;
}

🤔 문제 후기

문제는 되게 쉽게 풀었는데, if (diff > level) answer += (diff - level) * (time_prev + time) + time; 이 부분에서 i == 0을 예외처리하고 조건을 복붙해서 (time_prev + time)을 넣어주지 않아서 이거 찾는데 30분이 걸렸다. 막히는게 있다면 가끔 쉬운 부분에서 막히는게 아닐까 다시한 번 생각해보면 좋을 것 같은 문제였다.

728x90

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

[ 백준 21610 ] 마법사 상어와 비바라기 (C++) - 시뮬레이션  (3) 2024.10.13
[ 백준 20056 ] 마법사 상어와 파이어볼 (C++) - 시뮬레이션  (3) 2024.10.12
[ 백준 1277 ] 발전소 설치 (C++) - 그래프 이론, 구현  (0) 2024.09.23
[ 백준 17142 ] 연구소 3 (C++) - BFS, 시뮬레이션  (0) 2024.09.12
[ 백준 16236 ] 아기 상어 (C++) - BFS  (1) 2024.09.11
  1. 🔗 문제 링크
  2. 💡 문제 풀이 및 해석
  3. ⭐️ 정답 코드 및 설명
  4. 🤔 문제 후기
'문제풀이/알고리즘 문제 풀이' 카테고리의 다른 글
  • [ 백준 21610 ] 마법사 상어와 비바라기 (C++) - 시뮬레이션
  • [ 백준 20056 ] 마법사 상어와 파이어볼 (C++) - 시뮬레이션
  • [ 백준 1277 ] 발전소 설치 (C++) - 그래프 이론, 구현
  • [ 백준 17142 ] 연구소 3 (C++) - BFS, 시뮬레이션
RealTone
RealTone
풀스택 개발자되기 기원 1년차
RealTone
개발공부 블로그
RealTone
전체
오늘
어제
  • 분류 전체보기 (84) N
    • 개발자 공부 (7)
      • 인프라 - AWS (2)
      • Frontend - React (1)
      • Frontend - Next (2)
    • 구름톤트레이닝 (2) N
      • 강의 후기 (0)
    • 문제풀이 (74)
      • 알고리즘 문제 풀이 (62)
      • SQL 문제 풀이 (12)
    • 개인 (0)
      • 멕북초기화세팅 (0)

블로그 메뉴

  • 홈
  • 태그
  • GitHub
  • 방명록

태그

  • AWS
  • baekjoon
  • CI/CD
  • codedeploy
  • ec2
  • G2
  • G3
  • G4
  • G5
  • git/github

최근 글

hELLO · Designed By 정상우.v4.2.2
RealTone
[ 프로그래머스 PCCP 기출문제 2번 ] 퍼즐 게임 챌린지 (C++) - 이분 탐색
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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