www.acmicpc.net/problem/7576

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

 

 

근본이 넘치는 bfs 문제

'알고리즘' 카테고리의 다른 글

프로그래머스 68646 : 풍선 터트리기  (0) 2020.10.24
백준 1759 : 암호 만들기  (0) 2020.10.22
백준 2530 : 인공지능 시계  (0) 2020.10.22
백준 13023 : ABCDE  (0) 2020.10.22
백준 1009 : 분산처리  (0) 2020.10.22

www.acmicpc.net/problem/2530

 

2530번: 인공지능 시계

첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0

www.acmicpc.net

 

시간에 대한 문제도 좀 많이 풀어봐야 하는데

 

맨날 나올때마다 대강 생각하고 풀고 넘어가버려서

 

시간에 관련된 어려운 문제가 나오면 풀 수 있을지

'알고리즘' 카테고리의 다른 글

백준 1759 : 암호 만들기  (0) 2020.10.22
백준 7576 : 토마토  (0) 2020.10.22
백준 13023 : ABCDE  (0) 2020.10.22
백준 1009 : 분산처리  (0) 2020.10.22
백준 11723 : 집합  (0) 2020.10.22

www.acmicpc.net/problem/13023

 

13023번: ABCDE

문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.

www.acmicpc.net

 

클래식 dfs

 

'알고리즘' 카테고리의 다른 글

백준 7576 : 토마토  (0) 2020.10.22
백준 2530 : 인공지능 시계  (0) 2020.10.22
백준 1009 : 분산처리  (0) 2020.10.22
백준 11723 : 집합  (0) 2020.10.22
백준 1337 : 올바른 배열  (0) 2020.10.22

www.acmicpc.net/problem/1009

 

1009번: 분산처리

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

www.acmicpc.net

 

예전에 이런 문제에 대해 규칙을 찾기가 귀찮아 건너뛴 적이 많았는데

 

귀찮으면 안되겠지

 

코드가 좀 이상한 부분이 있다. 나중에 이 기록을 다시 본다면 함 보고 잘 생각해볼것

'알고리즘' 카테고리의 다른 글

백준 2530 : 인공지능 시계  (0) 2020.10.22
백준 13023 : ABCDE  (0) 2020.10.22
백준 11723 : 집합  (0) 2020.10.22
백준 1337 : 올바른 배열  (0) 2020.10.22
백준 1874 : 스택 수열  (0) 2020.10.22

www.acmicpc.net/problem/11723

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

 

비트마스크란 이런 것이다?

'알고리즘' 카테고리의 다른 글

백준 13023 : ABCDE  (0) 2020.10.22
백준 1009 : 분산처리  (0) 2020.10.22
백준 1337 : 올바른 배열  (0) 2020.10.22
백준 1874 : 스택 수열  (0) 2020.10.22
백준 1182 : 부분수열의 합(비트마스크, dfs)  (0) 2020.10.22

www.acmicpc.net/problem/1337

 

1337번: 올바른 배열

첫째 줄에 배열의 크기 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수

www.acmicpc.net

 

처음에 접근을 잘못해서 이상하게 생각했는데

 

겁나 쉬운 문제였다

 

와 이걸 네시간동안 봤다고

 

이걸

 

 

 

'알고리즘' 카테고리의 다른 글

백준 1009 : 분산처리  (0) 2020.10.22
백준 11723 : 집합  (0) 2020.10.22
백준 1874 : 스택 수열  (0) 2020.10.22
백준 1182 : 부분수열의 합(비트마스크, dfs)  (0) 2020.10.22
백준 15666 : N과 M(12)  (0) 2020.10.22

www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

하라는대로 따라하면 풀리는 문제

 

 

코드

 

 

'알고리즘' 카테고리의 다른 글

백준 11723 : 집합  (0) 2020.10.22
백준 1337 : 올바른 배열  (0) 2020.10.22
백준 1182 : 부분수열의 합(비트마스크, dfs)  (0) 2020.10.22
백준 15666 : N과 M(12)  (0) 2020.10.22
백준 6588 : 골드바흐의 추측  (0) 2020.10.22

www.acmicpc.net/problem/1182

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

비트를 이용해 완전탐색을 돌리는 이런 방법도 있구나

 

비트연산이 사실 아직까지 좀 겁나긴 하는데

 

이렇게 간단한 정도라면 괜찮은 것 같다

이건 간단하게 재귀 dfs로 풀어본 방식

근데 웃긴건 재귀 dfs가 훨씬 빠르다ㅋㅋㅋㅋ

 

음, 왜지...?

'알고리즘' 카테고리의 다른 글

백준 1337 : 올바른 배열  (0) 2020.10.22
백준 1874 : 스택 수열  (0) 2020.10.22
백준 15666 : N과 M(12)  (0) 2020.10.22
백준 6588 : 골드바흐의 추측  (0) 2020.10.22
백준 10972, 10973 : 다음 순열, 이전 순열  (0) 2020.09.09

www.acmicpc.net/problem/15666

 

15666번: N과 M (12)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

dfs로 짜는건 일반적인 방법이라 할말이 없는데

 

다만 이터레이터의 사용을 좀 열심히 해봤다

 

결론은 그냥 하던대로 하는게 좋을것같다

 

www.acmicpc.net/problem/6588

 

6588번: 골드바흐의 추측

각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰

www.acmicpc.net

 

 

 

에라토스테네스를 하도 오래전에 봐서 규칙만 보고 다시 짠다는 마음으로 만들어봤더니

 

계속 틀렸다고 나와서... 다 잘 만들어놓고 무려 한시간이나 고민했다

 

여기서 처음엔 unsigned int만 집어넣고 썼는데

 

i * i 에서 오버플로우가 터져버리는걸 몰랐던거다

 

매우 기본적인걸 놓쳐서 너무 화가난다

Direct X Utility

 

제공 기능

 

- 윈도우 생성

- Direct3D 디바이스 선택

- Direct3D 디바이스 생성

- 디바이스 이벤트 처리

- 윈도우 이벤트 처리

- 창 모드와 전체 화면 모드 사이의 전환

 

맨 마지막은 좀 소소한 느낌이 드는데, 아무튼

 

DXUT는 기본적으로 상위 버전의 DX를 우선적으로 지원한다. 무슨 소린가 하면

https://vsts2010.tistory.com/143

그리고 각종 GUI를 지원하기 위한 기능도 제공하고, IME 기반의 텍스트 입력, 카메라 조작, 타이머 등도 제공

(IME 기반의 텍스트 입력 : 컴퓨터 자판의 개수보다 더 많은 글자를 쓰는 언어를 입력할 때 특정한 방식의 키보드 입력을 하면 해당되는 글자를 나타내는 시스템 = 한글)

이러한 부가기능은 모듈별로 제공, DXUT 프레임워크와 무관하게 따로 사용가능

 

 

이런 식으로 DX 샘플 브라우저에서 인스톨 프로젝트로 예제 프로그램 수준 뿐 아니라 실제 상용게임을 개발하는 것도 가능하다고 한다

? 진짜?

 

DXUT 초기화는 DXUTInit() 함수에서 시작

DXUT를 사용한 윈도우 생성

 

DXUTGetHWND() 함수를 사용하면 윈도우 핸들을 얻는다

 

API로 생성된 윈도우 사용시 DXUTSetWindow() 함수를 사용한다. 미리 생성된 윈도우를 DXUT에서 사용 가능

 


윈도우 이벤트 처리

 

DXUT를 사용한 이벤트 처리

DXUTCreateWindow() 함수를 사용해 메시지 처리가 가능하다

대부분의 중요한 메시지들은 DXUT에서 자동으로 처리된다.

DXUT가 처리하는 것 외에 추가로 처리를 원한다면 DXUTSetCallbackMsgProg( MsgProc ) 함수를 사용해 메시지 처리 콜백함수 등록 가능

DXUTSetCallbackMsgProg 함수의 인자

*pbNoFurtherProcessing = true 일 경우 사용자가 메시지 처리를 완료한 것으로 인식,

DXUT가 그 메시지에 대해 추가적 처리를 하지 않게 함. 그러나 DXUT 오작동 가능성이 있으니 사용 시 주의

 

윈도우를 직접 생성했다면 메시지 처리도 직접 하는 것이 가능

DXUTStaticWndProc() 함수로 관련 메시지를 DXUT에 넘겨서 처리할 수 있다. 


 

'그래픽스' 카테고리의 다른 글

래스터라이저  (0) 2020.11.29
D3DXVec3의 Coord와 Norm  (0) 2020.10.26
가우시안 블러  (0) 2020.09.30
드로우 콜  (0) 2020.09.16
Height Map  (0) 2020.09.13

환경매핑

 

카메라 -> 주전자 방향의 벡터는 주전자의 법선벡터와 연산으로 반사벡터를 얻을 수 있다.

 

reflectionVec = reflect(카메라->주전자 벡터, 주전자 법선벡터);

 

반사벡터를 구하는 공식은 reflectionVec = p - 2(n(n · p)) 
p는 입사벡터 n은 노말벡터

 

슬라이딩벡터는 sVec = p - n(n · p) 

 

환경매핑은 반사벡터가 향하는 지점의 큐브맵에서 X, Y 좌표에 위치한 RGB색상값을 반사벡터의 시점 좌표의 픽셀에 대응시키는것

 

방법은 texCUBE 함수를 사용하는것

 

resultColor = texCUBE(큐브맵, 반사벡터);

 

이다.


 

 

여기서 문제가 되는 점이 있다. y축 방향이 0.8이 나오는데, 사실 uv 좌표는

 

위에서 아래로 내려간다. 아래에서 위로 가는게 아니라...

 

연산한 y값을 뒤집으면 제대로 된 값이 나오는 것 같은데, 이건 좀 더 알아봐야겠다.

큐브맵 좌표계 검색

https://www.slideshare.net/Mark_Kilgard/11texture

 

CS 354 Texture Mapping

CS 354 Computer Graphics; University of Texas, Austin; February 23, 2012

www.slideshare.net

uv 좌표가 아니다...!


스카이박스

 

카메라를 중심으로 한 큐브나, 스피어 모델을 만들고 거기에 환경맵의 텍스처 매핑을 하는 연산이다.

 

정점 셰이더에서 할 일은 박스 모델의 중심 위치를 항상 카메라의 위치와 동일하게끔 행렬 연산을 해주는 것이 전부다.

 

픽셀 셰이더에서 할 일은 정점의 좌표를 받아와서 값을 리턴해주는게 전부다.

 

렌더스테이트를 잘 설정해야 하는게 스카이박스의 주요 포인트라고 생각된다.

 

주의 -

스카이박스는 모니터 해상도만큼 픽셀 셰이더를 호출하는 나름 비용 드는 연산이다.

최적화를 위한다면 스카이박스 연산이 필요한 부분을 제외하고는 연산하지 않는 방법이 좋다.

그래서 스카이박스 패스를 맨 마지막으로 미뤄서 진행하라는 말도 있고 뭐, 그렇다

 

 

PASS a - 스카이박스

정점 셰이더

여기서 position3D는 투영공간의 좌표인데, texCUBE 함수는 월드 공간의 연산이다.

 

좀 더 정확히 하려면 월드 공간의 좌표를 넘겨줘야 하는듯 하다

픽셀 셰이더

texCUBE는 월드 공간 값으로 연산해줘야 한다!

렌더스테이트

PASS b - 환경매핑

mm5-gnap.tistory.com/244

 

8. 환경매핑

 

mm5-gnap.tistory.com

코드는 생략

렌더스테이트

 

 

근데 이거 색이 좀 이상하다

포스트 프로세싱이란 장면을 2D 텍스처에 그린 다음, 그 위에 영상처리 기법을 입히는 것이다.

포스트 프로세싱을 이용하면 쓸데없이 셰이더의 수를 늘리는 것을 막을 수 있다.

화면 가득 픽셀을 그리려면 화면을 가득 채우는 사각형을 그린다.

 


 

'그래픽스 > 김포프 셰이더' 카테고리의 다른 글

10. 그림자 매핑  (0) 2020.07.23
9. UV 애니메이션 & 울렁효과  (0) 2020.07.22
8. 환경매핑  (0) 2020.07.22
7. 노말매핑  (0) 2020.07.21
6. 툰셰이더  (0) 2020.07.17

+ Recent posts