본문 바로가기
✨ Club|Project/알튜비튜 e-class 튜터 | Algorithm

❇️ 알튜비튜 ❇️ - 4번째 (보조)강의 - 수

by 정람지 2023. 9. 27.

🫒해야 할 일

(9월 27일)

1. 코드 자세히~ ⭕️
2. 설명 준비 ⭕️
3. 과제 코드리뷰하기⭕️ 
4.원스탑튜터 ⭕️ - 아파서 한 번 쌔비지
5. 피피티제출⭕️
6. 강의하기⭕️

+ clion 라이선스 체크하기⭕️ 
+ ⭐️다음 강의 자료만들기⭕️ 

라이선스!! 학생 무료 라이선스가 잇엇다니!!

두번 결제햇는데!!이미

그리고 그것도 자꾸 라이선스 없다고 뭐라해서 못 썼는데

아.. 하려다가 한달이 지나버리고..

드디어 자동결제 취소...


👩🏻‍🏫 준비 👩🏻‍🏫

구현 문제 한 개

수업시간 몰래 알튜비튜준비

알고리즘을 미리 하니 자료구조 시간에 즐겁네요 교수님 저도 똑같은 두 문제 저저번주에 강의햇어용

 

18111번: 마인크래프트

팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 

www.acmicpc.net

#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> pii;

const int MAX_HEIGHT = 257;
const int INF = 987'654'321;//가능한 최댓값이 12,800,000이므로 많이 쓰는 큰 수인 987654321을 사용했습니다! INF관련 글을 한번 읽어보세요!

// 모든 땅의 높이를 height로 만드는 비용 계산
int calcCost(int height, int n, int m, int b, vector<vector<int>>& blocks) {
    int cost = 0;
    int added = 0;      // 추가해야 하는 블록의 총 개수
    int removed = 0;    // 제거해야 하는 블록의 총 개수
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int gap = abs(height - blocks[i][j]);
            
            if (blocks[i][j] > height) {
                // 목표 높이보다 높은 칸인 경우, gap개의 블록 제거
                removed += gap;
            }
            else if (blocks[i][j] < height) {
                // 목표 높이보다 낮은 칸인 경우, gap개의 블록 추가
                added += gap;
            }
        }
    }
    
    // 전체 비용 계산
    cost = 2 * removed + added;
    
    // 블록 개수가 부족하다면 모든 땅의 높이를 height로 만드는 것이 불가능
    return (added > (b + removed)) ? INF : cost;
}

// 모든 땅의 높이를 같게 만드는 최소 비용과 그 때의 땅의 높이
pii makeGroundEven(int n, int m, int b, vector<vector<int>>& ground) {
    int minCost = INF;
    int height = 0;
    
    // 모든 높이를 다 만들어보고 최소 비용 찾기
    for (int i = 0; i < MAX_HEIGHT; i++) {
        int cost = calcCost(i, n, m, b, ground);
        if (cost <= minCost) {
            minCost = cost;
            height = i;
        }
    }
    
    return {minCost, height};
}

/**
 * 블록 높이의 최댓값이 256밖에 되지 않으므로
 * 모든 칸을 높이 n(0~256)으로 만드는 모든 경우를 시도해보고
 * 그 중에서 비용이 최소가 될 때를 찾는다.
 *
 * 모든 칸을 높이 n으로 만드는
 */

int main() {
    int n, m, b;
    
    // 입력
    cin >> n >> m >> b;
    vector<vector<int>> ground(n, vector<int>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> ground[i][j];
        }
    }

    // 연산
    pii answer = makeGroundEven(n, m, b, ground);

    // 출력
    cout << answer.first << " " << answer.second << "\n";

    return 0;
}

8달 전에 썻던 파이썬 코드도

# 브루트 포스
from sys import stdin
N, M, B = map(int,stdin.readline().split()) # 세로 가로 인벤토리블록
land = [list(map(int,stdin.readline().split())) for _ in range(N)]
answer = 999999999

for height in range(257):
    max_target, min_target = 0, 0

    for i in range(N):
        for j in range(M):
            if land[i][j] >= height:
                max_target += land[i][j] - height
            else:
                min_target += height - land[i][j]
    if max_target + B >= min_target:
        if min_target + (max_target * 2) <= answer:
            answer = min_target + (max_target * 2) 
            Height = height # 층수

print(answer, Height)

👩🏻‍🏫 강의 👩🏻‍🏫

강의하는 채원언니 캡처

나는 끝에 조금만~

갠찬게한듯!

 

이독 세미나 홍보도 함


👩🏻‍🏫 코드리뷰 👩🏻‍🏫

[그리디 알고리즘 구현 코드 리뷰 완료]

18111 (P3)

 

 

[그리디 알고리즘 구현 코드 리뷰 완료]
18111 (P3)
전체적으로 깔끔하고 좋은 코드로 작성해주셨네요! 코멘트 남긴 부분 확인해주세요! 수고하셨습니다!

 

make pair 대신 {}를 쓰셔도 됩니다!

많이 쓰이는 자료형은 typedef를 이용해서 별칭 지정해보시는 건 어떨까요?

p3. 입출력만 메인 함수에서 진행해보시고 기능별로 함수를 밖으로 빼 보세요!

c++에서 최댓값(INF)을 다루는 여러 가지 방법에 대해 찾아보셔도 좋을 것 같네요!

 

큼큼..많이나오는거복붙으로돌려막기하는나쁜튜터..

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ알고리즘 부분 코드리뷰하는채원언닠ㅋㅋㅋㅋㅋ

다 똑같았던것

교수님 호오오옥시 보고 계신다면..죄송합니다

사람들이.. 많이 없어지셨다

분명 40이었는데

이제 19..?

리뷰할 게 줄어서 기쁘지만...엄..


오예 

스트릭 또 깨졌다

우왕!

미쳣다 그냥

캠핑에서 벌레들과의 미팅 이슈로..빨리 잠에 들었더니..

ㅜ내 81일?이었나

하..

이제 안 한다