TIL(35)

이채원·2026년 7월 31일

TIL

목록 보기
35/77

오늘의 할일
1. 코드카타 정리
2. 팀프로젝트 정리
3. 다음 학습 목표


코드카타 정리

정수를 저장한 배열 arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수

  • 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    
    auto min_it = min_element(arr.begin(), arr.end());
    arr.erase(min_it);
    
    answer = arr;
    
    if (arr.size() <= 1) {
        answer.push_back(-1);
        return answer;
    }
    
    return answer;
}

AI가 짜준 간결한 코드

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) {
    // 1. 배열의 길이가 1 이하인 경우 바로 {-1}을 리턴하여 종료합니다.
    if (arr.size() <= 1) return {-1};

    // 2. 최솟값을 찾음과 동시에 원본 배열에서 삭제합니다.
    arr.erase(min_element(arr.begin(), arr.end()));

    // 3. 수정된 원본 배열을 그대로 리턴합니다.
    return arr;
}

좀 더 빠른 작업 속도로 하려면(-1 반환 경우) 1 이하일 경우에 리턴하는 if문을 맨 처음으로 올려야겠다고 깨달음


팀프로젝트 정리

  • 오늘의 목표
    AddItem 함수 완성시키기
  • 오늘의 일정
    깃 익숙해지기(패치 습관화)
    상점 시스템 추가 방안 확립, 상점 시스템에 사용할 임시 함수 선언
    구현하려던 기능 구현 및 코드 통합(AddItem 중첩 처리)
  1. Item 구조체

현재 Inventory.h 맨 위에 적어두었던 struct Item은 아이템 담당자가 맡는 게 맞다고 판단함.

  • Inventory.h에서 struct Item { ... }; 부분을 지우고, Item.h 파일을 #include해서 가져다 쓰기
    #include "../../include/item/Item.h"
  • 협업 요청 하기 (변수 이름 정의)
string Name;				// 아이템 이름
string ItemDescription;		// 아이템 설명
string ItemDropLocation;	// 아이템 드롭 장소
int Price;					// 아이템 가격
int ItemCount;				// 아이템 갯수
int ItemMaxStack;			// 아이템 최대 갯수

-> 작성한 코드에서 변경된 변수 이름 적용

  1. Item.h에 있는 UseItem 함수 이름이 겹침 문제 발생
    -> UseItem(아이템 사용시 0개 되면 슬롯 삭제) 함수 이름 ConsumeItem으로 변경

예상 아이템 사용 흐름:

1) 가방에서 1번 포션을 선택함
2) 인벤토리에서 GetItem(1)로 1번 포션의 정보를 꺼내옴
3) UseItem(player, 포션)로 체력 회복
4) ConsumeItem(1)로 포션 갯수 1개 차감

  1. 랜덤 아이템 사용 (UseRandomItem) 협업

Item.h에 UseRandomItem(Player& player, vector<Item>& items)가 있는데 여기서 vector<Item>& items가 인벤토리의 내용물이어서 인벤토리 전체 배열을 가져갈 수 있도록 함수 추가해야 할 것 같음

  • Inventory 템플릿에 추가
public:
    vector<T>& GetAllItems() {
        return items_;
    }
  • 협업 요청 :

    랜덤 아이템 쓸 때 인벤토리의 GetAllItems() 함수 부르면 인벤토리에 있는 vector<Item> 배열 넘겨짐. 거기서 랜덤으로 하나 뽑아서 효과 적용, 다 쓴 다음에는 RemoveItem 호출

<오늘 작업한 거 정리>

GetAllItems()를 만든 이유: 아이템 담당자가 "랜덤으로 아이템 하나만 뽑아 쓸게!"라고 할 때, 내 가방을 함부로 뒤지지 못하게 하면서도 배열의 내용물만 살짝 빌려주기 위해 만든 '소통 창구'입니다.

public:
    vector<T>& GetAllItems() {
        return items_;
    }
  • 아이템 획득 (AddItem)
    -> 가방을 처음부터 끝까지 훑어서 주운 아이템과 이름이 똑같은 게 있는지 검사
    --> 만약 똑같은 아이템이 있고 빈자리(spaceLeft가 1 이상) 있으면 갯수 더하기(꽉 채워도 남는 건 새로운 칸 생성해서 거기다 푸시하기)
void AddItem(T newItem) {
    for (int i = 0; i < items_.size(); i++) {
        if (items_[i].Name == newItem.Name) {
            int SpaceLeft = items_[i].ItemMaxStack - items_[i].ItemCount;

            if (SpaceLeft > 0) {
                if (SpaceLeft >= newItem.ItemCount) {
                    items_[i].ItemCount += newItem.ItemCount;
                    cout << "-> " << newItem.Name << " " << newItem.ItemCount << "개를 기존 슬롯에 합쳤습니다.\n";
                    return;
                }
                else {
                    items_[i].ItemCount += SpaceLeft;
                    newItem.ItemCount -= SpaceLeft;
                    cout << "-> " << newItem.Name << " " << SpaceLeft << "개를 합치고 나머지는 새 슬롯에 넣습니다.\n";
                }
            }
        }
    }

    if (items_.size() >= capacity_) {
        ExpandCapacity();
    }

    items_.push_back(newItem);
    cout << "-> " << newItem.Name << " " << newItem.ItemCount << "개를 새 슬롯에 획득했습니다!\n";
}
  • InventoryManager 클래스
    -> 소비 아이템이랑 재료 아이템을 한 가방에 두면 복잡해보일 것 같아서 가방을 2개로 넣는 기능 하고 싶었음.
class InventoryManager {
private:
    Inventory<Item> consumableBag_;
    Inventory<Item> materialBag_;

-> 아이템을 습득했을 떄 If문으로 소비템인지 재료템인지 확인하려고 늘어뜨리는 코드보다 함수 분리해서 하는 게 더 깔끔할 것 같아서 분리해봄

public:
    void AddConsumable(Item item) {
        cout << "[소비 가방] ";
        consumableBag_.AddItem(item);
    }

    void AddMaterial(Item item) {
        cout << "[재료 가방] ";
        materialBag_.AddItem(item);
    }
};
  • 오늘 달성한 목표
    상점 시스템 추가 방안 확립, 상점 시스템에 사용할 임시 함수 선언
    구현하려던 기능 구현 및 코드 통합(AddItem 중첩 처리)
  • 오늘 달성하지 못 한 목표와 이유
    깃 익숙해지기(패치 습관화)→ 아직 어렵네요..

다음 학습 목표

모든 기능 구현 완료(오류 고치기 까지)
헤더, 소스 파일 나누기

profile
초보 개발자

0개의 댓글