1. Day12

  • C++ 문법 학습
  • 알고리즘 특강 - 2
  • git활용/코드리뷰 라이브 세션
  • 학습 가이드
  • 개인 공부

2. C++ 문법 학습(Day12)

게임 개발자를 위한 C++ 문법(2-2)

  • 템플릿

3. git활용/코드리뷰 라이브세션

  • Branch 및 PR 실습

4. CH2 학습 가이드 - 12/12

  • 클래스 상속 및 생성자, 다형성

5. 개인공부

  • 실버2 18111번 마인크래프트(브루트포스 알고리즘, 구현)
    • 처음에 접근방법에 대한 어려움을 겪어 클로드에 코드를 제외한 접근법에 대한 힌트를 얻은 다음에 진행
 //  실버2 18111번 마인크래프트(브루트포스 알고리즘, 구현)
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N, M, B;

    cin >> N >> M >> B;
    vector<vector<int>> v(N, vector<int>(M));

    //  주어진 땅의 높이 입력
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cin >> v[i][j];
        }
    }

    //  0부터 시작해서 가장 높은 땅의 갯수 까지
    int H = 0;
    // 최종 높이
    int resultH;
    //  걸리는 시간 
    int T = 1e9;
    //  주어진 땅의 높이와 가지고있는 블록의 갯수를 이용해서 가능한 땅의 높이를 전부 구한다
    while (H <= 256)
    {
        //  while문 안에서 성공한 걸리는 시간과 한바퀴 돌았을때의 가지고잇는 블록 갯수를 저장하기 위한 임시 변수
        int tempT = 0;
        int tempB = B;  //  주어진 B갯수로 시작 좌표 체크하면서 파낸 블록 갯수만큼 ++
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
            {
                //  목표 높이보다 체크한 좌표의 높이가 더 크면 차이만큼 파내고 *2 초만큼 임시 시간++
                //  그 높이 차이만큼 임시 블록 갯수 ++
                if (H < v[i][j])
                {
                    int diff = v[i][j] - H;
                    tempT += diff * 2;
                    tempB += diff;
                }
                //  목표 높이보다 체크한 좌표의 높이가 더 낮으면 차이만큼 임시 시간에++ 임시 높이에--
                else if (H > v[i][j])
                {
                    int diff = H - v[i][j];
                    tempT += diff;
                    tempB -= diff;
                }
            }
        }

        //  만일 최종으로 임시높이가 0이상이면 평탄화 가능 그리고 그 시간이 이전 시간이랑 같거나 작다면 최종 높이랑 최종 시간의 자격이 있음
        if (tempB >= 0 && tempT <= T)
        {
            //  이번 while문에서 최종적으로 나온 임시 시간이 기존에 저장되어있던 시간보다 적게 걸린다면 갱신
            T = min(T, tempT);
            //  걸리는 시간이 같다면 더 큰 높이로 결과 저장(어차피 H++인 while문이기 때문에 시간이 같다면 if문에 걸린 시간이 같거나 작으면이라는 조건 때문에 while문이 끝날때 가장 큰 H가 저장
            resultH = H;
        }
        //  H가 계속 커져서 최고 높이에 도달하면 while문이 끝나도록++
        H++;
    }

    cout << T << " " << resultH << '\n';

    return 0;
}

5. 내일 계획 : 알고리즘 문제 풀이추가

+ Recent posts