L
누르고 좌클릭)Alpha
가 0에 가까우면 A
, 1에 가까우면 B
값이 나타남TextureSample
생성Texture Coordinate
를 생성하여 텍스처의 UV채널에 연결하여 텍스처의 패턴을 수정할 수 있다.Multiply
를 활용하여 원벡터를 곱하면 UV타일링을 편하게 조절할 수 있다.Texture Coordinate
는 원벡터 값을 반환Component Mask
를 활용해서 R, G마스크를 입혀서 U, V의 투벡터 값을 반환하게 한다.AppendVector
로 다시 합치면 된다.(모든 예시
는 피보나치 수열로 설명)
O(n^2)
O(f(n))
n번째 숫자의 n
f(n) = f(n-1) + f(n-2)
f(0)=0, f(1)=1
#include <iostream>
#include <string>
using namespace std;
int memo[41] = { 0 };
int cnt1 = 0, cnt2 = 0;
int fib1(int n) {
if (n == 1 || n == 2) {
cnt1++;
return 1;
}
else return (fib1(n - 1) + fib1(n - 2));
}
int fib2(int n) {
memo[1] = memo[2] = 1;
for (int i = 3; i <= n; i++) {
cnt2++;
memo[i] = memo[i - 1] + memo[i - 2];
}
return memo[n];
}
int main(int argc, const char* argv[]) {
int n;
cin >> n;
fib1(n);
fib2(n);
cout << cnt1 << " " << cnt2;
return 0;
}
i
번째 집의 누적 비용은 [현재 집의 색과 겹치지 않는 색상]의 i-1
번째 집들 중 최소값과 현재 집에 필요한 색상의 비용을 더한다.#include <iostream>
using namespace std;
int rgb[1001][4]; //비용
int dp[1001][4]; //누적 비용
int findMinCost(int n) {
int tempMin; //이전 집과 겹치치 않는 색상 중 최소 비용
for (int i = 1; i <= n; i++) { //모든 집 탐색
for (int j = 1; j <= 3; j++) { //각 집의 색상 별 비용 탐색
if (i == 1) { //1번 집은 이전 집이 없으므로 색상 별 비용으로 갱신
dp[i][j] = rgb[i][j];
}
else {
//i번째 집을 빨간색(j=1)으로 칠하는 경우의 tempMin
if (j == 1) tempMin = min(dp[i - 1][j + 1], dp[i - 1][j + 2]);
//i번째 집을 초록색(j=2)으로 칠하는 경우의 tempMin
else if (j == 2) tempMin = min(dp[i - 1][j - 1], dp[i - 1][j + 1]);
//i번째 집을 파란색(j=3)으로 칠하는 경우의 tempMin
else if (j == 3) tempMin = min(dp[i - 1][j - 1], dp[i - 1][j - 2]);
//tempMin과 해당 색상의 비용의 합
dp[i][j] = tempMin + rgb[i][j];
}
}
}
//마지막 집의 3가지 누적 비용 중 최소 비용 반환
tempMin = min(dp[n][1], dp[n][2]);
return min(tempMin, dp[n][3]);
}
int main(int argc, const char* argv[]) {
int n;
cin >> n;
//각 집마다의 비용 저장
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 3; j++) {
cin >> rgb[i][j];
}
}
cout << findMinCost(n);
return 0;
}
y-x+1/2
만큼 반복하며 x+j
, y-j
를 바꾼다.1
, 4
입력한 경우 -> arr[1]과 arr[4]
, arr[2]와 arr[3]
를 바꾸는 두 번의 swap 실행#include <iostream>
using namespace std;
int main(int argc, const char* argv[]) {
int N, M;
int x, y;
cin >> N >> M;
int* arr = new int[N+1];
for (int i = 1; i <= N; i++) {
arr[i] = i;
}
for (int i = 0; i < M; i++) {
cin >> x >> y;
if (x != y) {
for (int j = 0; j < (y - x + 1)/2; j++) {
swap(arr[x + j], arr[y - j]);
}
}
}
for (int i = 1; i <= N; i++) {
cout << arr[i] << " ";
}
return 0;
}
#include <iostream>
using namespace std;
int main(int argc, const char* argv[]) {
string S;
cin >>S;
cout << S.length() << endl;
return 0
}
#include <iostream>
using namespace std;
int main(int argc, const char* argv[]) {
int T;
string S;
cin >> T;
while (T--) {
cin >> S;
cout << S[0] << S[S.length() - 1] << endl;
}
return 0;
}
65
를 빼서 A->0이 되도록 변환3
으로 나눴을 때 몫+3
을 하여 시간을 구한다.P(15)
, Q(16)
, R(17)
는 3
으로 나눴을 때 몫이 5
이지만 S(18)
은 몫이 6
이므로 S
인 경우에는 -1
을 해줘야한다.V(21)
, WXYZ의 Y(24)
, Z(25)
도 -1
을 해줘야한다.#include <iostream>
using namespace std;
int main(int argc, const char* argv[]) {
string S;
int time = 0;
cin >> S;
for (int i = 0; i < S.length(); i++) {
time += ((int)S[i] - 65) / 3 + 3;
if (S[i] == 'S' || S[i] == 'V' || S[i] == 'Y' || S[i] == 'Z') time--;
}
cout << time;
return 0;
}
cin
대신 getline(cin, S)
을 사용""
로 저장되므로, 이 경우에 반복문이 끝나도록 하였다.#include <iostream>
#include <string>
using namespace std;
int main(int argc, const char* argv[]) {
string S;
while (true) {
getline(cin, S);
if (S == "") break;
cout << S << endl;
}
return 0;
}
좋은 정보 얻어갑니다, 감사합니다.