오늘 학습 진행 내용
C++ 강의
1-3 코딩 테스트 이해하기
코딩 테스트의 의미
제한 시간 내 주어진 문제 프로그래밍 언어 활용해서 푸는 시험
푸는 과정을 체계화되는 것이 중요함(시험 중 고민 시간이 늘어나게 됨)
일주일에 한번 정도는 실전 동일 환경에서 테스트
효율성이 중요함(성능 -> 시간 복잡도와 연관됨)
요구사항 파악과 반복 트레이닝이 중요
제한 시간 내 문제 요구값 도출할 수 있는 성능 나와야됨.
문제를 읽고 충분히 설계하는 과정이 필요(의사 코드 작성)
예외 사항 고려해서 테스트 테이크 추가, 문제 해결(디버깅 능력)
코딩 테스트 공부 전 준비 사항
자신의 수준을 명확히 파악
프로그래머스 레벨 0~1
기본문법 숙지, 직관과 단순 논리로 문제 해결
프로그래머스 레벨1~2
자료 구조 및 알고리즘 숙지, 간단한 자료 구조 적용해서 문제 해결
프로그래머스 레벨 2~3
다양한 접근 방식으로 풀이, 요구 서능 파악 이에 맞는 코드 구현 가능
코딩 테스트 효율적으로 학습 방법
우선 순위 선정해서 효율적으로 학습
고난이도 문제 어려우면 기본 문제 빠르게 1독 풀고 , 2독 다시 시도
긴박한 시험 일정이 있을 경우 빈출 알고리즘 위주로 공부
실제 문제 푸는 전략
1. 문제요약
3문장 요약, 요구성능 요약, 예외사항 파악, 키워드 파악
2. 입출력 분석
예시 입력 작성
3. 전략 설계
의사코드 작성
테스트 작성
4. 구현
구현에 투자하는 시간은 30프로 정도
예시 문제
오픈 채팅방
문제 요약
채팅방 들어오고 나감에 대한 입출력 메세지 구현
채팅방 들어오고 나가거나 닉네임 변경 기록 문자열 배열 record가 매개변수 -> 모든 기록 처리 후 최종 적으로 방 개설 사람이 보는 메세지 배열 형태로 return 하는 solution 함수 완성
특이 사항
빙방 나가서 새로운 닉네임으로 다시 들어가거나, 채팅방에서 닉네임 변경 시 채팅방에 기존 메세지들에도 모두 반영되어야 됨.
제한 사항 :
record 배열은 1~100000
유저 아이디, 닉네임 길이는 1~10
모든 닉네임은 유저 아이디로 구분됨.
주의사항 : 필요한 예외사항만 구현 명심하기
입출력 예시를 보고 문제의 과정을 한번 더 분석 해보기
전략 설계
실전 문제 푸는 단계(문제를 어떤 방식으로 풀지 정리하는 단계)
전략 1- 설계
입력으로 받은 record를 명령어-유저 아이디- 닉네임 형태로 배열로 저장
메시지 확인하면서 배열을 순회
명령어 Enter 혹은 Change인 경우 동일한 유저 아이디 가진 닉네임 업데이트.
배열 순회하면서 문제 요구한 대로 출력 (명령어 Change인 메세지는 출력 X)
전략 2 - 실행
입출력 테스트 결과 확인
다른 테스트 케이스에 대해서도 통하는지를 확인해야됨.
전략 3- 예외 케이스 찾기
전략 4 - 재설계
명령어 Enter 혹은 Change인 경우 동일한 유저 아이디 가진 닉네임 업데이트.
명령어가 Leav인 경우, 최근 Enter 혹은 Change 메시지의 닉네임으로 업데이트(추가)
전략 6- 실행
테스트 케이스는 통과하지만 시간 초과 문제 발생.
로직은 맞지만 요구하는 성능에 만족하지 못함을 의미
프로그래머스 채점 방식
정확성 테스트 : 코드가 리턴한 값과 실제 정답과 일치하는지 확인(테스트 별 10초안 값 return으로 확인)
효율성 테스트 : 코드에서 요구 성능 충족 확인(정답 코드 수행 시간 평균)
전략 7- 다시 재설계
그냥 순회로 처리하면 N(N-1)/2
특정 유저 아이디의 닉네임 테이블을 별도로 만들어서 해당 테이블에 조회해서 반영하는 형태로 수정
공부 내용 정리하는 기법
공부 내용 효율적으로 정리해야 기억에 오래 남음
문제 풀이 -> 한시간 내에 풀리는가?(1시간에서 1시간 반)
YES
시도한 전략 및 근거
실수했거나 막혔던 부분
알고리즘 분류
그 다음에 타인 코드 전략(타인은 어떤 형태로 풀었는지를 분석)
정답을 맞히더라도 다른 사람의 코드 확인하기
NO
내가 해결하지 못한 부분
프로그래머스에서 정답 코드 확인 후 정답 코드 전략 및 근거(정답 코드에서 사용한 자료구조와 알고리즘을 사용한 이유-문제에서 어떤 부분에서 이걸 떠올렸을지)를 확인
알고리즘 분류
코딩 테스트는 알고리즘이나 자료구조에 대한 기본적인 이해와 숙지가 반드시 필요
코딩 테스트에서는 깊이 있는 수학적 지식을 요구하는 문제는 출제 빈도가 낮음.
코딩 테스트 레벨 2~3 정도를 목표로 잡자.
해결 문제 수와 난이도 꾸준히 기록하고 추적하는 것이 필요
모르는 문제가 나왔을 때는 60분 정도만 투자하고 고민해보자.
언리얼 엔진 강의
1-5 레벨,컨트롤러,UI, 액터 등 개발의 요소
게임의 구성 요소
GameMode
현재 게임이 어떤 규칙으로 돌아갈지 정의
GameState
Player Controller
플레이어 입력을 받아 처리
HUD : UI적인 요소
Input
Pawn(액터)
AI Controller
입력한 행동에 따라 자동으로 반응하는 NPC, 몬스터 (Pawn) 형태
해당 요소들은 레벨 안에서 함께 동작, 액터들이 실질적인 오브젝트로 존재, UI를 통해 플레이어와 정보 주고받음
레벨 : 게임이 진행되는 맵, 장면 또는 무대
언리얼에서는 하나의 레벨을 Persistent Level(메인 레벨)
Sub-Level(추가적인 요소들) 메인 레벨에 추가
FIle -> New Level 로 새로운 메인 레벨 생성 후
생성된 레벨 패널에서 Create New 클릭해서 새로운 서브 레벨을 생성
레벨 패널에서 더블 클릭으로 서브 레벨 클릭해서 해당 레벨에 Actor 배치
서브 레벨을 눈동자 아이콘으로 비활성화면 서브레벨의 Actor도 비활성화됨.
라이팅 포함(Lit) 눌러서 액터 배색(Actor Coloration) 눌러서 레벨 컬러 선택하면 레벨 별로 색상 지정이 가능.
레벨 스트리밍 방법 변경이 사용됨 -> 해당 레벨에서 우측 클릭 -> Change Streaming Method로 변경
블루프린트 아이콘에서 레벨 블루 프린트 열기(Open Level Blue Print)
해당 기능 사용하는 이유는 성능 이슈로 필요한 것들만 로드하기 위해서
블루프린트 사용해서 많이 구현할 예정
Level 이동 -> 맵 이동
블루프린트 내에 이벤트 그래프 연결 짓는 방식으로 구현 가능
기존 level -> delay -> open level 이런 형태로 해서 맵이동 구현 가능
전체 기능의 맛보기 정도로만 생각하자
컨트롤러
플레이어 컨트롤러
플레이어가 입력한 신호를 받아 게임 내 행동 연결
하나의 플레이어는 일반적으로 하나의 플레이어 컨트롤러 배정
컨트롤러와 폰의 관계
컨트롤러는 폰(Pawn)을 소유(possess)해서 직접 제어
AI 컨트롤러
NPC나 적 캐릭터의 인공지능 로직 (Behavior Tree)를 통해서 의사 결정 과정 구현
UI 시스템
UMG(Unreal Motion Graphics)
블루 프린트로 UI 시각 요소 설계 가능
클라이언트 개발자에서는 건드릴 일이 거의 없음.
액터
액터의 기본 구조
액터는 레벨에 배치할 수 있는 모든 오브젝트
액터의 생명주기는 4단계
초기화 -> 시작(Spawned) -> Tick(프레임마다 업데이트) -> Destroy
액터의 종류
Pawn
액터를 상속받아 조종 가능한 특징 더한 클래스
액터-> 폰
캐릭터
폰을 상속 받아 걷기, 달리기, 점프 등의 이동 로직 포함된 클래스
폰 -> 캐릭터
컴포넌트
액터에 Attacth 된다.
액터에 어태치해서 특수한 기능들을 추가하는 것
예시) 공격한다는 기능의 특수한 것을 넘겨줘서 캐릭터가 공격을 하게 된다
이벤트와 상호작용
액터는 블루프린트 이벤트를 통해서 상호작용을 구현
1-6 Fab(마켓 플레이스) 탐험
https://fab.com 로그인
필요한 에셋 검색해서 사용 가능.
online learning kit
Lower Sector Building Kit
다운받아서 강의에서 사용.
다운로드 받은 에셋 언리얼 버전 안 맞을 경우 해당 에셋 프로젝트 생성해서 언리얼 버전 변경
혹은 생성된 폴더 내에서 Unreal Engine Project 파일 우클릭해서
Switch Unreal Engine 클릭해서 엔진 버전 변경 가능
생성된 프로젝트에 새로운 에셋 추가 시 버전 호환 안될 경우
호환되는 버전으로 다시 생성해서 프로젝트에 추가 후 해당 프로젝트 버전 변경하는 방법 가능
낮은 버전에서 높은 버전은 변경 가능 , 반대는 불가능
추가된 에셋은 Content 폴더 내에 존재.
1-7 액터(Actor)의 종류와 액터 배치
액터는 레벨 내에 존재하는 모든 오븥젝트 기반의 클래스(건물, 캐릭터,라이트,카메라 등)
눈에 보이지 않는 것들은 트리거 볼륨이라고도 부름(액터의 일종)
언리얼 엔진에서 자주쓰이는 액터의 종류
기본 액터
트리거 혹은 위치 지정할 경우에 사용
스태틱 매쉬 액터
시각적 표현을 하기 위한 것들(기능 추가도 가능)
디렉셔널 라이트, 스카이 라이트는 하늘의 광원효과 기능 담당
스폿 라이트, 포인트 라이트, 렉 라이트는 특정 위치에 광원 뿌려주는 역할
폰 액터
폰 액터는 캐릭터에 자동 빙의(Auto Possess Player), AI에 자동 빙의(Auto Possess AI) 이런 형태로
플레이어가 컨트롤 , AI가 컨트롤 옵션 추가 가능
캐릭터 액터
캐릭터 액터는 캡슐 컴포넌트(캐릭터 크기), Character Movement(캐릭터 이동,마찰력,점프) 이런 것들이 기본적으로 할당.
볼륨을 배치해서 트리거 역할 혹은 오디오 재생 같은 이런 역할들을 할당할 수 있음
액터 드래그해서 배치 혹은 컨텐츠 내에서 찾아서 배치 가능
복사 방법
alt 키 누른 상태에서 움직여서 복사 가능 혹은 ctrl + c , ctrl+v로도 가능
블루 프린트에서
SpawnActor와 Make Transform 기능을 사용해서 액터를 생성하는 기능을 사용 가능
C++ 튜터 강의
강의 들으면서 어려운 부분
1. 처음부터 끝까지 강의 듣기
2. 모르는 단어들은 찾아보면서 중간중간 정리하기
사전캠프 퀘스트
Unreal 톺아보기
STEP 1. 학습 내용을 요약하기
언리얼 엔진 에디터 기본 영상을 보고 아래 질문에 대한 답을 작성해주세요.
Unreal Engine의 주요 기능은 무엇인가요?
Unreal Engine Editor를 활용해서 프로젝트를 생성하고 해당 프로젝트 내에 뷰포트, 액터, 레벨 등 다양한 요소등을 이용해서 해당 프로젝트 내에 구현하고자 하는 바를 구현하는 것
영상에서 사용된 프로젝트나 사례는 어떤 것이었나요?
영상에서는 Unreal Engine Editor 내의 디폴트 레이아웃과 이를 내 프로젝트에 알맞게 설정하는 방법에 대해 설명했습니다. 구체적으로, 에디터에서 제공하는 다양한 패널과 기능 탭들을 열고 닫으면서, 어떻게 작업 환경을 효율적으로 커스터마이즈할 수 있는지 다뤘습니다.
첫 번째로, 에디터의 기본 레이아웃을 소개하며, 이를 프로젝트에 맞게 어떻게 설정할 수 있는지 설명했습니다. 이 과정에서 뷰포트 창, 월드 아웃라이너 패널, 디테일 패널, 컨텐츠 브라우저, 메인 툴바 등을 활용하는 방법을 상세히 다뤘습니다.
또한, 에디터의 개인 설정 창에서 테마, 키보드 단축키, 접근성 관련 설정 등을 개인의 입맛에 맞게 수정할 수 있다는 점을 강조했습니다. 이를 통해 사용자에게 최적화된 작업 환경을 제공할 수 있음을 알렸습니다.
마지막으로, 월드 세팅 패널과 프로젝트 세팅에 대해 설명하며, 각 설정이 프로젝트에 어떻게 영향을 미치는지, 그리고 이를 어떻게 효율적으로 적용할 수 있는지에 대해서도 언급했습니다.
STEP 2. 실습 프로젝트 따라하기
Unreal Engine을 실행하고, 아래의 단계를 따라 작은 프로젝트를 생성하세요.
새 프로젝트를 만들고 템플릿 중 3인칭 템플릿을 선택하세요.
캐릭터를 배치하고 움직임을 테스트하세요.
간단한 오브젝트(예: 박스)를 추가하고, 캐릭터와 상호작용하게 만들어 보세요.
프로젝트를 완성한 후, 아래 질문에 답해 보세요.
프로젝트를 진행하며 어려웠던 점은 무엇인가요?
아직 Editor의 레이아웃에 익숙하지 않아서 여러번 창을 닫았다 열었다 하는 과정을 거치게 되었습니다.
그리고 뷰포트 화면을 wasd와 마우스 클릭으로 조정하는데 있어서 익숙하지 않아서 원하는 각도로 화면을 전환한다거나 하는 것을 여러번 반복해가면서 사용해봤습니다.
새로운 기능이나 툴을 배웠다면 무엇인가요?
뷰포트에 대한 개념 그리고 액터를 생성해서 움직여본다던가 플레이 버튼으로 내가 프로젝트 내 생성한 것들을 테스트 해보는 환경 사용하는 것들에 대해서 배웠습니다.
다음 프로젝트에서 도전하고 싶은 아이디어는 무엇인가요?
여러 액터 종류들을 만져보고 액터들에 기능을 추가해서 해당 기능들이 작용하는 것들을 테스트해보고 싶습니다.