코딩 테스트 3-5
스택의 개념과 LIFO 원리를 이해할 수 있는 시간.
stack
웹 브라우저 뒤로 가기 기능은 현재 페이지를 방문하기 전 가장 최근에 방문한 페이지로 이동하는 기능.
스택을 활용하면 쉽게 구현할 수 있는 문제다.
pop - 원소를 빼는 연산 @
push - 원소를 추가하는 연산
ADT(Abstract Data Type)
구체적인 구현보다 스택의 전체적인 구조와 동작 방식을 파악하는데 있다.
boolean isFul() - 스택이 들어 있는 개수가 maxsize인지 확인하는 연산 -> true / false
boolean isEmpty() - 스택이 있는 데이터가 하나도 없는지 확인하는 연산 -> true / false
void push(ItemType item) - 스택에 데이터를 추가하는 연산
itemType pop() - 스택에서 최근에 추가된 데이터를 제거하고 그 데이터를 반환하는 연산
int top - 스택에서 최근에 추가된 데이터의 위치를 기록
itemType data(maxsize) - 스택의 데이터를 관리하는 배열 ->크기는 maxsize
boolean - 참/거짓 만으로 이루어진 데이터 값
push() / pop()
IsEmpty()를 통해 빈 스택인지 확인. 비어있지 않으면 top을 1만큼 증가/감소
이미 완성된 STL에서 사용할 것이니 외우는 것 보다는 이해만 해도 괜찮다.
C++에서는 STL의<stack> 헤더를 통해 스택 자료구조를 제공한다.
stack::top()
stack::empty()
stack::size()
stack::push()
stack::pop()
stack::push_range()
// 목적: C++ STL stack의 기본적인 사용법을 학습
// 동작: 정수를 스택에 push하고 top/pop을 이용해 후입선출 구조 확인
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(10);
s.push(20);
s.push(30);
cout << "스택의 top: " << s.top() << endl; // 30
s.pop(); // 30 제거
cout << "pop 후 top: " << s.top() << endl; // 20
return 0;
}
/*
출력결과
스택의 top: 30
pop 후 top: 20
*/
decimal
*문자열의 문제가 출제되었을 때 +말고 +=을 사용하는 것이 좋다.(시간 복잡도에서 후자가 더 유리하다!)
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
// 가격이 떨어지지 않은 기간을 저장한 벡터
vector<int> answer(prices.size());
// 스택에는 prices의 인덱스가 들어감, 이전 가격과 현재 가격을 비교하기 위한 용도로 사용됨
stack<int> s;
int priceNum = prices.size();
for(int i=0;i<priceNum;i++){
while(!s.empty()&&prices[s.top()]>prices[i]){
// 가격이 떨어졌으므로 이전 가격의 기간 계산
answer[s.top()] = i-s.top();
s.pop();
}
s.push(i);
}
// 스택에 남아있는 가격들은 가격이 떨어지지 않은 경우
while(!s.empty()){
answer[s.top()] = priceNum-s.top()-1;
s.pop();
}
return answer;
}
// 아래 코드는 테스트 코드 입니다.
#include <iterator>
#include <iostream>
void print(vector<int> vec)
{
copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
}
int main()
{
print(solution({1, 2, 3, 2, 3})); // 4 3 1 1 0
return 0;
}
강의 자료에 노션을 활용하면 좀 더 수월하게 볼 수 있다.
========================================
코딩 테스트 3-6
큐의 개념과FIFO의 원리를 이해할 수 있다.
ZB(큐)의 주요 연산을 이해하고 ,STL에서 제공하는 큐를 활용한다.
큐(queue)는 대기열을 의미한다.
스택은 FILO인데 큐는 들어간 순서대로 출력 된다.(FIFO라서)
공용 프린터의 예시.
매표소 저작권 무브한 예시 그림 이야기.
둘은 큐와 유사하게 작동한다.
ADT(Abstract Data Type)
인터페이스만 있고 실제로 구현하지 않은 자료형을 말한다.
rear
// 목적: STL queue의 주요 메서드(front, back, push, pop, size, empty)를 한 번에 학습하는 예제
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
q.push(1); // 큐: [1]
q.push(2); // 큐: [1, 2]
q.push(3); // 큐: [1, 2, 3]
cout << "Front element: " << q.front() << endl; // 1
cout << "Back element: " << q.back() << endl; // 3
cout << "Queue size: " << q.size() << endl; // 3
q.pop(); // 1 제거 → 큐: [2, 3]
cout << "After one pop, new front: " << q.front() << endl; // 2
if (!q.empty()) {
cout << "Queue is not empty." << endl;
} else {
cout << "Queue is empty." << endl;
}
return 0;
}
/*
출력결과
Front element: 1
Back element: 3
Queue size: 3
After one pop, new front: 2
Queue is not empty.
*/
요세푸스 문제
카드 뭉치 문제
=====================================================================
언리얼 2-5
머티리얼 & 라이팅
머티리얼
표면 묘현 - 금속, 유리, 나무, 플라스틱 등 재질을 사실적으로 표현
빛의 상호작용 - 조명에 따른 반사, 굴정, 그림자 효과를 부여
효과 구현 - 노멀 맵, 스페큘러, 메탈릭 등 세밀한 속성을 통해 복잡한 시각 효과를 구현한다.
실습 해보는 게 빠르겠다.
===================
언리얼 2-6
머티리얼 애니메이션
항공장애등
Y= C*sin(x+A) +B
time -> sine -> 이미시블 컬러
fresnel
언리얼 2-7
튜터님의 응원(?)영상
========================
언리얼 실습 1-8강
카메라 피치 상속을 제거하면
트렌스 폼의 스프링암 각도를 유지할 수 있으나 플레이 상황에서 피치 값을 받지 못해 부자연스러운 카메라 무브를 구현할 수 밖에 없었다.
- 해결은 그냥 시작 카메라를 내려놓는 걸로 임시해결.



언리얼 실습 1-9강
플레이어가 조작한 상황에 맞게 폰(?)의 애니메이션이 적절하게 출력되도록 세팅하는 과정



'TIL' 카테고리의 다른 글
| 25.11.19일자 - TIL (0) | 2025.11.19 |
|---|---|
| 25.11.18일자 - TIL (0) | 2025.11.18 |
| 25.11.14일자 - TIL (0) | 2025.11.14 |
| 25.11.13 일자 - TIL (0) | 2025.11.13 |
| 25.11.12일자 - TIL (0) | 2025.11.12 |