GameChoi
Choi Programming
GameChoi
전체 방문자
오늘
어제
  • 분류 전체보기 (468)
    • C++ Algorithm & Study (184)
      • C++ & Algorithm Strategies (45)
      • Game Math & DirectX 11 (72)
      • Server + UE5 (29)
      • Lyra Clone Coding (37)
    • Create Game (284)
      • [Window API] Game Client & .. (55)
      • [DirectX] DirectX 2D & 3D (155)
      • [UE5] BLUEPRINT & C++ (74)
    • odds and ends (0)
      • English (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Algorithm Strategies
  • server
  • UE5
  • Destination Move Packet
  • client
  • job queue
  • RPG Game
  • core
  • protobuf
  • Game Server
  • session
  • Game Room
  • Direct3D
  • Player State
  • Direct11
  • c++
  • Network Worker
  • GAME Client
  • Other Character
  • Player Move Packet

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[Programmers] 디펜스 게임
C++ Algorithm & Study/C++ & Algorithm Strategies

[Programmers] 디펜스 게임

2022. 12. 15. 17:10

https://school.programmers.co.kr/learn/courses/30/lessons/142085

 

프로그래머스

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

programmers.co.kr

0. Headers

 - 우선순위 큐 사용 및 Less 사용

#include <vector>
#include <queue>
#include <functional>
using namespace std;

 

1. 알고리즘

 - 우선순위 큐를 사용하여 적의 수를 저장

   - 이렇게 한다면 들어오는 값마다 최대값 갱신

int solution(int n, int k, vector<int> enemy) {
    priority_queue<int, vector<int>, less<int>> pq;
    // enemy [4, 2, 4, 5, 3, 3, 1]
    for (int i : enemy)
        pq.push(i);
    // enemy [ 4 ]
    // enemy [ 4, 2]
    // enemy [ 4, 4, 2]
    // enemy [ 5, 4, 4, 3]
}

 - 위 방식을 사용한다면 만약 플레이어의 병사와 적의 병사들을 빼면서 우선순위 큐에 저장하기 때문에 for문이 돌아갈 때마다 적의 최대 수를 갱신

 - 따라서 플레이어와 적의 병사가 싸우면서 플레이어의 병사 수가 음수로 떨어지고 무적권이 있으면 무적권 사용

    - 사용시 우선순위 큐에 있는 적의 수를 플레이어의  병사에게 더해주고 무적권 수 감소

int solution(int n, int k, vector<int> enemy) {
    priority_queue<int, vector<int>, less<int>> pq;
    int answer = 0;
    for (int i : enemy)
    {
        pq.push(i);        
        if (n - i < 0 && k > 0) // 플레이어 병사 - 적 병사 < 0 and 무적권 > 0
        {
            n += pq.top(); // 적의 가장 많은 병사 더함
            pq.pop();
            k--; // 무적권 감소
        }
        n = n - i
    }
}

 - 종료 조건

   - 플레이어의 병사 - 적 병사가 음수이고 무적권이 0개 일 경우 종료

   - 모든 적의 공격을 막았을 경우 적의 배열 수 리턴

int solution(int n, int k, vector<int> enemy) {
    priority_queue<int, vector<int>, less<int>> pq;
    int answer = 0;
    for (int i : enemy)
    {
        pq.push(i);      
        if (n - i < 0 && k > 0)
        {
            n += pq.top();
            pq.pop();
            k--;
        }
        else if (n - i < 0 && k == 0) return answer; // 병사 수 음수 및 무적권 개수 0
        n = n - i;
        answer++;
    }
    return enemy.size(); // 적의 배열 개수
}

 

2. 완성 코드

#include <vector>
#include <queue>
#include <functional>
using namespace std;

int solution(int n, int k, vector<int> enemy) {
    priority_queue<int, vector<int>, less<int>> pq;
    int answer = 0;
    for (int i : enemy)
    {
        pq.push(i);      
        if (n - i < 0 && k > 0)
        {
            n += pq.top();
            pq.pop();
            k--;
        }
        else if (n - i < 0 && k == 0) return answer;
        n = n - i;
        answer++;
    }
    return enemy.size();  
}

Test Code

'C++ Algorithm & Study > C++ & Algorithm Strategies' 카테고리의 다른 글

[Porgrammers] 최솟값 만들기  (0) 2022.12.16
[Programmers] 올바른 괄호  (0) 2022.12.15
[C++] 14 - 기초 문법 공부 일지(Smart Pointer)  (0) 2022.12.11
[C++] 13 - 기초 문법 공부 일지(Sort)  (1) 2022.12.08
[C++] 12 - 기초 문법 공부 일지(STL)  (0) 2022.12.06
    'C++ Algorithm & Study/C++ & Algorithm Strategies' 카테고리의 다른 글
    • [Porgrammers] 최솟값 만들기
    • [Programmers] 올바른 괄호
    • [C++] 14 - 기초 문법 공부 일지(Smart Pointer)
    • [C++] 13 - 기초 문법 공부 일지(Sort)
    GameChoi
    GameChoi

    티스토리툴바