dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스 SQL
  • HackerRank mysql
  • 백준 DP
  • c++
  • dp
  • 기록
  • Baekjoon
  • 서블릿
  • 회고
  • 부스트캠프
  • BFS
  • 프로그래머스
  • 스프링
  • 일기
  • Hackerrank
  • 네이버 부스트캠프
  • AI Tech
  • 백준
  • 반성
  • 그래프탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 위클리 챌린지] 피로도 (완전탐색, next_permutation) [C++]

2022. 1. 4. 15:02
728x90

https://programmers.co.kr/learn/courses/30/lessons/87946

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr

 

각 던전에는 입장할 수 있는 최소 피로도, 던전을 돌고 나면 소모되는 피로도가 주어진다.

전체 피로도가 주어지고, 던전을 입장하면서 최대 몇 개의 던전을 돌 수 있는지 구한다.

 

처음엔 그리디 같은 걸 생각했지만, 던전의 개수도 8개 이하이기 때문에 완전 탐색으로 풀었다.

완전 탐색으로 던전을 진입하는 순서를 만들고, 각 순서 쌍마다 다 던전을 돌아보는 방법이다.

 

즉, 던전이 4개라면 던전을 입장하는 순서를 순열로 만든다면

1 2 3 4, 1 2 4 3, .... 4 3 2 1 등이 있을 것이고 이걸 next_permutation으로 만들었다.

 

- 던전을 입장할 수 있는 모든 순서쌍을 만들고 피로도를 계산해보는 완전 탐색 풀이 방법

- next_permutation으로 순서쌍을 만들기 위해서 0 1 2 3을 벡터에 넣어주고 돌렸다.

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

void permutation(int k, vector<vector<int>> & dungeons, int & answer){
    vector<int> per;
    int tempK = k;
    for(int i = 0 ; i < dungeons.size() ; i++){
        per.push_back(i);
    }
    do{
        tempK = k;
        for(int i = 0 ; i < per.size() ; i++){
            int next = per[i];
            int minValue = dungeons[next][0];
            int consumeValue = dungeons[next][1];
            
            if(tempK >= minValue){
                tempK -= consumeValue;
                answer = max(answer, i+1);
            }
            else{
                break;
            }
        }
    } while(next_permutation(per.begin(), per.end()));
}

int solution(int k, vector<vector<int>> dungeons) {
    int answer = -1;
    permutation(k, dungeons, answer);
    return answer;
}

 

728x90
저작자표시 비영리 변경금지

'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글

[프로그래머스 월간 코드 챌린지 시즌 1] 이진 변환 반복하기 (구현, 계산) [C++]  (0) 2022.01.11
[프로그래머스 2018 KAKAO BLIND RECRUITMENT 3차] 방금 그곡 (문자열, ) [C++]  (0) 2022.01.11
[프로그래머스 2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (파라매트릭 서치) [C++]  (0) 2021.10.07
[프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (DFS, 조합) [C++]  (0) 2021.10.07
[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자 상반기 SQL] 헤비 유저가 소유한 장소  (0) 2021.10.06
    '문제 풀이/프로그래머스 알고리즘, SQL' 카테고리의 다른 글
    • [프로그래머스 월간 코드 챌린지 시즌 1] 이진 변환 반복하기 (구현, 계산) [C++]
    • [프로그래머스 2018 KAKAO BLIND RECRUITMENT 3차] 방금 그곡 (문자열, ) [C++]
    • [프로그래머스 2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (파라매트릭 서치) [C++]
    • [프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (DFS, 조합) [C++]
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바