TIL
07.24 TIL
2026. 7. 24. 10:55

일정표

시간 할 일 비고
08:30~10:00 코드카타  
10:00~13:00 팀프로젝트, 개인프로젝트  
14:00~18:00 발표회, 브로셔 작성  
19:00~21:00 브로셔 작성, 개인 이력서 작성  
21:00~22:00 운동  
22:00~23:30 개인 프로젝트  


*오늘의 코드카타*

 

문제. 햄버거 만들기

더보기

햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.

예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하고, 아홉 번째 재료가 쌓였을 때, 두 번째 재료와 일곱 번째 재료부터 아홉 번째 재료를 이용하여 햄버거를 포장합니다. 즉, 2개의 햄버거를 포장하게 됩니다.

상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 return 하도록 solution 함수를 완성하시오

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> ingredient) {
    int answer = 0;

    vector<int> stack;
    stack.reserve(ingredient.size());
    
    for (int item : ingredient) {
        stack.push_back(item);

        if (stack.size() >= 4) {
            int n = stack.size();

            if (stack[n - 4] == 1 && 
                stack[n - 3] == 2 && 
                stack[n - 2] == 3 && 
                stack[n - 1] == 1) {
                
                answer++;

                stack.pop_back();
                stack.pop_back();
                stack.pop_back();
                stack.pop_back();
            }
        }
    }
    
    return answer;
}

<오늘은 TIL 휴식입니다>

 

오전 : 기초반 수업 따라하기(애니메이션 세팅)

오후 : 발표회 + 발표회 필기(배울 점들, 따라하고 싶은 기능, 감명깊게 봤던 것들

 

저녁 : 팀 프로젝트 브로셔 작성 및 개인 성과 정리

더보기

<발표회 07.24 CH.3 언리얼 팀프로젝트> : 알게된 것 : 발표 전에 팀원들이랑 줌 켜서 비디오 공유랑 유튜브 키기 이런거 테스트 한번 하자. 발표 내용은 최대한 핵심만 딱딱 말하고 늘어지지 않게 템포를 조절하자.
======================
3조 : 
탑다운 쿼터뷰 로그라이크 게임. 

보스전을 잘 구현했고, 보스패턴을 나타내는 빨간 가이드 위험 표시도 구현.
카드 스킬 슬롯이 퀵슬롯 역할을 수행하고, 각 스킬의 쿨타임을 잘 시각화하였음(사용하면 어두워졌다가, 위에서 아래로 밝아지면서 쿨타임을 표시). 인벤토리 기능은 화면 상단에 '패시브 아이템'으로 사용.
카드 덱과 상점 긴능 : UI 나 배경 이미지 사용한 것이 인상적이었음. 예쁜 디자인이어서 마음에 들었음(가시성은 좀 떨어지지만).
메인메뉴 - 캐릭터(4종류) 선택 : 내가 사실 초기 기획단계에서 원하던 방식. 각 프로젝트 팀원이 각자의 캐릭터를 만들면서 공부하는 경험이 되었을 것 같음.

일시정지 화면 : 캐릭터가 가지고 있는 스킬 목록과 스킬 설명. 계속하기와 다시하기 기능.

마우스 버튼으로 스킬을 사용하여 적을 처치하는 방식임. 스킬 이펙트도 잘 구현되어있었음. 레벨 상의 남은 몬스터를 계산하고 이를 UI에 띄우는 방식을 사용했음.

보스 레이드 : 보스는 각자 보스 스타일에 맞게 고유의 패턴을 가지고 있음. 
보스를 잡고나서는 상점 맵으로 이동하고, 여기에서 유물과 스킬을 구입해서 사용할 수 있음.
아이템에 커서를 가져다대면 아이템 설명이 나오는 UI 기능도 구현

<피드백>
2d, 3d 그래픽이 섞이면서 부자연스러운 느낌. 통일된 시점과 아트가 필요.
UI가 비율이 맞지 않아서 오는 부자연스럽고 불편한 느낌. UI 디자인은 깔끔하게 아니면 예쁘게 할 수 있으면 적용하기.
보스의 경우 특수 스킬의 경우 가시성이 많이 떨어짐. 보스 패턴시 출력되는 애니메이션 개선이 필요.
보스에게 스킬을 사용했을 때 내가 공격하고 있다는 피드백이 필요(플레이어가 느낄 수 있는 피드백 개선).

======================
======================
7조 : 
3인칭 액션/싱글플레이. 이동으로 살아남고, 전투로 사냥하며, 건축으로 밤을 방어한다. 스테이지마다 목적이 뚜렷한 3단 구성으로 이루어짐.
구성 : 게임 룰, 캐릭터 무브먼트&애니메이션, 몬스터 이동(AI) / 공격 애니메이션 / Navmesh, 인벤토리 / 아이템 획득 로직 / 캐릭터 공격 시스템, 레벨 디자인 / 맵 Asset / 발판 Movement, HUD 전반

레벨 기준으로 사용할 PlayerController를 자동으로 결정하도록 함. (스테이지별 입력 완벽 분리)
컴포넌트 아키텍처 : 모든 기능을 미리 보유한 컴포넌트. 컨트롤러가 지정한 것만 활성화하는 방식으로 사용.(캐릭터 클래스 하나로 모든 스테이지에서 재사용)

파쿠르, 와이어링(그래플링) 액션. 파쿠르의 경우 라인트레이스 + Motion Warping으로 정확한 위치에 정렬할 수 있도록함.

건축 디펜스 : 그리드 기반 벽/바닥/계단/지붕 배치. 오브젝트 풀링으로 건축물 재사용. 랜덤 비 환경시스템도 적용해서 비가 오면 바닥이 젖는 등 환경이 랜덤하게 변화함.

실시간 상태 반영 HUD 시스템 : 컴포넌트별로 델리게이트 열어놓고 상태 변경 시 화면 자동 갱신하게 만들어놓았음.

1스테이지 : 입장하면 연출과 함께 타이핑 효과 + 텍스트 연출. 벽을 타고 기어올라가고 벽 끝부분에 도달하면 위쪽 벽을 짚고 올라가는 동작 구현.(약간 위치조절은 필요하지만) + 바닥 장애물을 뛰어넘는 기능은 인상적이었음. 
와이어링 액션도 있는 걸 확인. 라인을 잇고 라인 종착점 중심으로 원을 그리며 이동하는 방식인 것 같음.

2스테이지 : 탭기 인벤토리 -> 인벤토리 상에서 아이템 이동, 슬롯 장착, 타겟에 쏘면 맞고, 수류탄 던져서 터지고 폭발 반경 안에 데미지를 주는 로직 구현되어있음. 아이템/스킬 : 방어 기능, 패링 기능

3스테이지 : 컷신도 구현되어있음(오...), 랜덤 스폰 아이템 구현, 벽을 세우고(세울 수 있으면 초록색, 불가능하면 빨간색), 밤이 되면 웨이브 시작. 바로 건축되는 것이 아니라 체력게이지가 0에서부터 차오르면서 100%가 되면 건축이 완료되는 방식.
건축 재료에 따라 건축 시간이 다른 것도 구현해 놓았음. 많은 물량이 나오고 최적화에 신경을 많이 썼음. 

최적화 파트는 나도 정말 중요하다고 생각해서 꼭 해보고 싶었는데..

>> 최적화는 어떻게 해결했는가? : 불필요한 오브젝트 Shadow 비활성화, Nanite 적용(렌더링 자동 최적화), 배경 오브젝트 병합(드로우콜 절감), Timer 기반 트리거, Sublevel 기반 밤/낮 전환, Folige 사용.
>> 최적화는 어떻게 해결했는가? (2) : 몬스터 의상 에셋 설정 -> Clothing 시뮬레이션 에셋 제거해서 메모리 사용 최소화. + 몬스터 체력바의 경우 2D 투영 방식으로 전환하고 월드 좌표를 화면 좌표로 투영해서 메모리 절감.

전반적으로 잘 만들고 구조를 잘 잡고, 팀프로젝트의 핵심을 잘 챙긴 좋은 프로젝트라고 생각했음!!

>> 피드백 : 전체적인 구성이 훌륭했고 다양한 시스템을 개발하려고 노력했던 점. 파트 교체를 통해서 다양한 경험을 얻으려고 했다는 점. 조작의 다양성을 챙겼던 점, 스테이지별로 컨트롤러 분리까지도 고려한 점이 훌륭했다.
무엇보다도 건축 시스템이 훌륭했고 오브젝트 풀링까지 도입하여 최적화 시도한 것이 매우 좋았다. '★★★상태 다이어그램'으로 정리하면 더 전문적이고 면접관들에게 어필이 잘 될 것이다.
파쿠르 시스템의 경우 벽과 손이 안맞는 지점, 몸체가 벽과 안맞는 지점은 IK를 더 잘 써보고 구현해보면 자연스럽고 깔끔하게 만들 수 있을 것.
Projectile(투척) : 경로 트레이싱, 적절한 이벤트까지 좋았다. 시네마틱 + 연출도 매우 좋았다.
미니맵의 가시성을 챙겨야 할 필요가 있었다.
'★★★경고 메시지, 에러 로그는 반드시 해결하거나 숨겨야 한다.'

일단 내가 생각했던 대로 '최적화'가 핵심. 반드시 '최적화'를 꼭, 꼭 신경쓰자!!!
======================
======================
13조 : 
13일의 월요일
우리가 적을 쫓아가자는 게임을 만들자는 목표로 개발하고, 적에게 돌을 던지는 1인칭 공포 슈팅 장르 게임. 
게임 컨셉 좋았음. 1인 공포게임 만들기 좋은 세계관과 컨셉이라는 생각이 들었음.

제물 탐색하고 돌을 찾아 집어들고 제물을 공격하는 게임.

글씨체도 임포트해서 좋은 분위기. 음악과 UI, 메인메뉴가 굉장히 인상적이었음. 매니아층이라면 꽤 인상깊게 볼 세계관.
레벨 이내에 제물을 잡으면 좌하단 아이콘이 해골모양으로 바뀌는 것(실시간 UI 연동) 까지 잘 표현함.

2스테이지에서는 적이 자신을 공격. 스태미나가 부족할 때에는 숨차는 사운드까지 넣어놓았음.
최종 스테이지에서는 적이 더 빨라지고 먼 거리에서도 플레이어의 발자국 소리를 들어 도망치게 됨.
화면 상단에 시간을 'progress bar'로 표시함.
심지어 스테이지가 끝나면 컷신까지 출력되도록 넣어놨고, 분위기에 맞는 음악과 사람 목소리까지 삽입. 패배했을 때 나오는 컷신도 있음. AI 썼겠지만 정성이 보여서 좋았음.

전반적으로 '시각적 자극, 이나 이런 여러 요소들을 굉장히 잘 넣은 느낌. 짧지만 굉장히 완성도가 높았음(디테일적으로). 게임 플레이 자체는 되게 단순하고 기능이 많지 않은 느낌이었지만, 그만큼 사운드와 연출, 세계관의 디테일을 굉장히 잘 챙긴 느낌.
적이 플레이어를 찾고 플레이어를 향해 돌을 던지는 기능도 인상적이었음. + 난이도 별로 AI 기능이 달라지도록 하는 로직이 개인적으로 궁금했음. 

게임에 많은 기능과 게임 룰이 더 추가되면 재밌을 것 같음. + 트랩 설치 시 NavMesh 설정이 꼬이면서 AI가 움직일 때 오류가 발생했다는 점은 나도 잘 알아둘 필요가 있어보임(해결방법은?).

>> 피드백 : AI 레벨 향상 시스템이 인상적. 드롭다운 UI 칸이 비어있는 모습으로 나오지 않도록 하기. 레벨 변경 시 그 사이에 뭔가를 넣어서 시각적 피드백으로 게임 플레이 경험 개선하면 좋았을 것.
난이도 조절에 대한 피드백이 있었음. + 아이템 추가도 고려해보기.
======================
======================
3조(Parcel Knight)

피드백 :
1. 리슨 서버 멀티플레이 + 스팀 api : 동기화 관련 노력은 엿보였으나 네트워크에서 다른 사람과 어떻게 동기화 되는지 절차적인 설명이 미흡했음.
2. UML같은 걸 도입해서 더 전문적인 다이어그램 위주로 발표를 준비했으면 좋았을 것. 
3. 바닥이 어두우면 그림자가 묻혀서 캐릭터가 바닥과 따로 노는 것처럼 보인다. 지면과 캐릭터간의 괴리감을 없앨 필요가 있다. 너무 어두운 바닥은 쓰지 말기.
4. 상점과 캐릭터의 interaction 좋았음.
5. hp 바 : 카메라가 가까이가면 Z축이 바뀌면서 캐릭터의 머리 위에 정확히 위치하는 게 아니라 거리가 벌어지는 현상이 발견되었음. 거리에 따라 위치를 보정하는(보간 작업) 작업이 UI에 필요함. 다른 메시에 가려지지 않도록 UI 가시성을 처리해볼 것.
6. 설정창 : 해상도 조절 괜찮았다.
7. 총 발사할 때 카메라 쉐이킹 넣으면 좋았을 듯.
8. early exit 좋았다.
9. 트러블 슈팅 어떤 흐름으로 정리했는지 설명한 게 제일 좋았음.
10. 서버-클라이언트 역할 분담. 가능하다면 다음에는 리슨 서버 뿐만아니라 데디케이트 서버도 도전해보자.

======================
======================
5조 : 
오인전대
아이템을 집으면 아이템이 먹어지고 인벤토리 기능이 구현되어있음.
근접무기가 손 소켓에 잘 부착이 안되어있는 상태이긴 했음.

첫 인상은 뭔가 커뮤니케이션이 잘 안됐던 걸까? 기능이 따로 노는 느낌이고 게임이라기보다는 기술 쇼케이스 느낌이다!라는 인상이었음. -> 어느정도 정답이었던 모양임(프로젝트 후기)

 

피드백 : 좋은 게임 안좋은 게임 여러개 잘 해보고, '일 잘한다는 느낌' 을 주기 위해서 많이 해보자!!

======================
======================
11조 : 

핀볼라이크. 아마 월드 플리퍼 참고 많이 한듯. -> 정답이었음.

여기는 진짜 게임같음. 여러 기믹, 스킬들이 있고, 에셋은 전부 게임에서 가져온 것 같긴한데...

로딩화면도 있음.
범퍼 로직, 물리충돌 로직, 캐릭터 스킬, 이런 여러 게임 요소들 월드 플리퍼와 완벽하게 같음. 게임 아이디어보다 실제로 이 로직들을 어떻게 언리얼 환경해서 구현했는지가 더 중요할 듯.

 

사실 직접 월드 플리퍼를 제법 많이 플레이 해본 사람으로서는 큰 감흥은 없었음. 요즘 AI로 게임 기능 찍어내기만 하면 그만인데다가, 게임 기능이나 플레이 방식 자체도 완벽하게 동일했음. 다만 에셋을 어떻게 이렇게 예쁘고 안정적으로 (사운드 에셋도 포함) 뽑아내 왔는지는 궁금했음.


======================
======================
1조 : 

해상전투를 만들었음.
월드오브 워쉽 많이 참고한듯? 현재 속도를 볼 수 있는 UI, 적이 어디있는지 볼 수 있는 것, 체력, 남은 적, 적의 현재 위치 이런 것 들이 있는 상태. 해상 전투를 직접 게임으로 만들어봤다는 것이 놀라웠음. 바다를 누비는 게임은 어떻게 만들까? 출렁이는 표현은 어떻게 할까? 항상 궁금했었는데, 프로토타입을 보니까 출렁거리는 표현은 구현하지 않았던 것 같았음. 그래도 아이콘이나 적 Ship 보스 등 기본적인 것들이 구현되어있어서 좋았음.

======================

 

 

 

'TIL' 카테고리의 다른 글

07.28 TIL  (0) 2026.07.28
07.27 TIL  (0) 2026.07.27
07.23 TIL  (0) 2026.07.23
07.22 TIL  (0) 2026.07.22
07.21 TIL  (0) 2026.07.21