[2023 하계 모각소] 어만사 3주차

jungizz_·2023년 7월 19일
0

모각소

목록 보기
3/12
post-thumbnail

📝 3주차

  • 언리얼 머터리얼 강의 [Unreal Engine 5: One Course Solution For Material] Section2🔗
  • 백준 단계별로 풀어보기🔗
  • 백준 공통 문제🔗

📅 7월 23일 21:00-24:00



📖 언리얼

‼ 언리얼 엔진5의 머터리얼 공부

1. 머터리얼 생성

  • 우클릭으로 머터리얼 생성
  • 생성된 머터리얼을 더블클릭하여 상세 창 확인


2. Data Type

Data Typefloat단축키
constant1float1 누르고 좌클릭
constant2Vector2floats (ex - X, Y)2 누르고 좌클릭
constant3Vector3floats (ex - R, G, B)3 누르고 좌클릭
  • 아래와 같은 형태이며 화면의 우클릭으로도 constant 생성 가능


3. 머터리얼 적용 / 색상 변경

  • constant3Vector를 생성하고 베이스컬러에 연결
  • 좌측 디테일창의 상수로 색 조절
  • 만든 머터리얼 적용

4. Roughness

  • 0은 부드럽고, 1은 거칠다.


📖 백준

🪧 {공통} 18870 좌표압축

✔ 좌표압축

  • 모든 구간이 아니라 중요한 구간이나 숫자만 들고있는 기법
  • 값보다 값의 순위가 중요한 경우, 입력값의 개수 < 입력값의 범위일 때 사용
  • ex) -5 -1 0 2 2 -> 0 1 2 3 3
  • 2 4 -10 4 -9 -> -10 -9 2 4 4 -> -10 -9 2 4 -> 2 3 0 3 1
  • 원본 벡터와 정렬 벡터 두 개를 선언
  • 정렬 벡터에서 erase(unique())로 중복된 값 제거
  • find()함수를 이용하여 원본 벡터의 원소가 정렬벡터에서 어디에 위치하는지 찾고 인덱스 출력 -> 시간초과
  • find()함수대신 이진탐색 기반인 lower_bound()함수를 이용하여 원본 벡터의 원소가 정렬벡터에서 어디에 위치하는지 찾음
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, const char* argv[]) {

	int N;
	int temp;
	vector<int> originVec; //원본 벡터
	vector<int> vec; //정렬 벡터

	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> temp;
		originVec.push_back(temp);
		vec.push_back(temp);
	}

	sort(vec.begin(), vec.end()); //정렬

	vec.erase(unique(vec.begin(), vec.end()), vec.end()); //중복 제거

	for (int i = 0; i < N; i++) {
    
		//temp = find(vec.begin(), vec.end(), originVec[i]) - vec.begin(); //originVec[i] 원소가 위치하는 인덱스
		//cout << temp << " ";

		//lower_bound : 찾고자 하는 값 이상이 처음 나타나는 위치
		//iterate를 반환하기 때문에 몇 번째 인덱스인지 알고싶다면 begin을 빼줘야함 
		cout << lower_bound(vec.begin(), vec.end(), originVec[i]) - vec.begin() << " ";
	}
	
	return 0;
}

📌 벡터 중복 제거 erase(unique())

  • 중복값을 제거하려면 정렬 과정이 반드시 필요하다. (인접한 원소들을 차례로 중복검사 하기 때문)
  • unique(x, y): x~y에서 연속된 중복 원소를 vector의 제일 뒷부분(쓰레기 값)으로 보냄
  • erase(x, y): 뒤에 붙은 쓰레기값 제거 (x~y범위 제거)

📌 하한 lower_bound(x, y, k)

  • x~y에서 찾는 값k보다 같거나 큰 값을 반환하는 함수
  • 이때 리턴값이 iterator이므로 .begin()을 빼주면 인덱스를 구할 수 있음

🪧 10810 공넣기

#include <iostream>

using namespace std;

int gcd(int N, int M);
int lcm(int N, int M);

int main(int argc, const char* argv[]) {
	int N, M;
	int i, j, k = 0;

	cin >> N >> M;

	int* arr = new int[N]();


	while (M != 0) {
		M--;

		cin >> i >> j >> k;

		for (int n = i; n <= j; n++) {
			arr[n-1] = k;
		}
	}

	for (int i = 0; i < N; i++) {
		cout << arr[i] << " ";
	}
	
	return 0;
}

📌 동적배열 선언 시 0으로 초기화

  • 선언 시 맨 뒤에 () 또는 {}을 붙여 0으로 초기화 int* arr = new int[N]();

🪧 2775 부녀회장이 될테야

#include <iostream>

using namespace std;

int findNum(int k, int n) {
	if (n == 1) return 1;
	else if (k == 0) return n;
	else return(findNum(k - 1, n) + findNum(k, n - 1));
}

int main(int argc, const char* argv[]) {
	int T, k, n;
	cin >> T;

	int* arr = new int[T]();

	for (int i = 0; i < T; i++) {
		cin >> k;
		cin >> n; 
		arr[i] = findNum(k, n);
	}
	for (int i = 0; i < T; i++) {
		cout << arr[i] << endl;
	}
	
	return 0;
}

🪧 10813 공 바꾸기

#include <iostream>

using namespace std;

int main(int argc, const char* argv[]) {
	int N, M, a, b, temp;

	cin >> N >> M;

	int* arr = new int[N+1](); //상자들

	for (int i = 1; i <= N; i++) {
		arr[i] = i;
	}

	for (int i = 1; i <= M; i++) {
		cin >> a >> b;
		temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

	for (int i = 1; i <= N; i++) {
		cout << arr[i] << " ";
	}
	
	return 0;
}

🪧 5597 과제 안 내신 분..?

#include <iostream>
#include <algorithm>

using namespace std;

int main(int argc, const char* argv[]) {

	//첫시도
	/*int arr[30];

	for (int i = 0; i < 28; i++) {
		cin >> arr[i];
	}

	for (int i = 0; i < 30; i++) {
		if (count(begin(arr), end(arr), i+1) <= 0) {
			cout << i + 1 << endl;
		}
	}*/

	bool arr[31] = {0, };
	int temp;

	for (int i = 0; i < 28; i++) {
		cin >> temp;
		arr[temp] = 1;
	}

	for (int i = 1; i <= 30; i++) {
		if (!arr[i]) cout << i << endl;
	}
	
	return 0;
}
profile
( •̀ .̫ •́ )✧

0개의 댓글