2024/10 52

[백준 실버3] 9095 1, 2, 3 더하기

https://www.acmicpc.net/problem/9095 피보나치 수열 처럼 n-1 n-2 n-3을 더해주면 된다.직접 손으로 그려가며 경우의 수를 써봤는데 1일 땐 1의 경우의 수2일 땐 2의 경우의 수3일 땐 4의 경우의 수4일 땐 1 + 2 + 4 = 7의 경우의 수였으며,5일 땐 7 + 4 + 2 = 13의 경우의 수를 가졌다.  #include #include #include #include using namespace std;int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int T; cin >> T; while (T-- != 0) { int n = 0; cin >> n; if (n..

프로그래머스 LV.2 멀리 뛰기

https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  해당 문제를 해결하기 위해서는일단 효진이의 멀리 뛰기 경우의 수를 구하는 것이 먼저다. N번째 경우의 수는 N-1번째 경우의 수 + N-2번째 경우의 수와 같다. 이는 마치 피보나치 수열과 유사하다.피보나치 수열은 n = n-1 + n-2의 관계성을 띈다.다만 피보나치 수열과 다른점은 피보나치는 첫째 및 둘째 항이 1인데 그것만 제외하면 피보나치 수열과 동일하다. 이렇게 나온 값 % 1234567 = answer이 된다. 시간초과 난 코드#i..

Java와 C++/C 차이 개체 배열, 선언문 관례

//JavaVector[] list = new Vector[10]//C++Vector* list = new Vector 위는 실질적으로 다른 코드이다Java의 new는 실제 vector 10개의 공간만 있고아무런 값도 들어있지 않은 nullprt이 10개 만들어진다. 그마다 vector를 만들어주려면 for문 돌면서 Vector 10개 만들어 줘야한다. C++에서는 이런 혼돈이 없다.new Vector하면 진짜 Vector를 10개 만들어준다.즉, 포인터를 담을 수 있는 공간 10개를 만들어주는 것이 아니라오브젝트 10개를 진짜 만들어준다. 글로 말하면 이해가 조금 안되는데 다음 그림을 보면 이해가 쉬울 것이다. 때문에 Java에서는 Vector 포인터라고 하는 것과 같다. 따라서 Java에서의 코드를 ..

HSK 5급 듣기 스크립트 및 지문 타이핑

男 : 你买东西了? 里卖弄是什么啊? 女 : 新的鼠标,原来那个坏了。 问 : 女 的买什么? A。鼠标 B。数据线 C。键盘 D。显示器 男 : 你点击右键, 然先复制,然后把它粘贴到桌面上就行了。 女 : 原来这么简单, 谢谢你。 问 : 女的最可能在学什么? A。 预订机票 B。使用电脑 C。装修房子 D。钓鱼 电脑相关词汇 1. 电脑 컴퓨터 2. 主机 본체 3. 主板 마더보드 4.中央处理器중앙처리장치(CPU) 5.内存 RAM 6.显卡 GPU 7.存储设备 저장장치 8.硬盘 HDD 9.固态硬盘 SSD 10. 电源 파워 11.散热器 쿨러 12. 键盘 키보드 13. 鼠标 마우스 14. 触摸板 트랙패드 15. 显示器 모니터 16.文件夹 폴더 17.浏览器 브라우저 18. 网址 사이트 주소 19. 网络 인터넷 20. 移动硬盘 외장하드 21...

취미/HSK 2024.10.28

상속구조를 이용한 유한 상태 기계 + Component Pattern을 곁들인...

얼마전에 책에서도 봤고, 최근 블로그에 정리해 놓기도 한 enum 쓰지않고 state 패턴 관리하는 방법을 현재 진행하는 프로젝트에 적용하고 싶어졌다. state를 클래스로 빼고 enum을 쓰지 않고 사용하면 다음과 같은 이점이 있다. state 패턴을 상속구조로 이용해 다양한 state 패턴을 만들 수 있다. 또한 클래스이기 때문에 코드 관리하기가 편하다. menuState, AIState, PlayerState .. 등등 을 하위 클래스로 관리하고 설계하게되면, 추후 코드가 더 깔끔하게 정돈되기 때문이다. 코드가 정돈이 되면 이로 인해 가독성도 높아진다. 클래스로 만들었기 때문에 재사용성도 높아져 효율도 좋아진다. 따라서 ActorClass에서 map으로 Component를 관리하고, StateCom..

네트워크 미시적으로 살펴보기

이번에 학습한 개념은 크게 세 가지 이다. 통신 과정에서 정보를 올바르게 주고받기 위해 합의된 규칙이나 방법을 의미하는 프로토콜통신이 일어나는 구조를 계층화한 네트워크 참조 모델통신 과정에서 이루어지는 캡슐화(역캡슐화)이다. 프로토콜네트워크에도 언어와 유사한 개념이 바로 프로토콜이다. 언어가 정보를 주고받기 위해 사회적으로 합의돈 의사소통 방식이라면,프로토콜은 노드 간에 정보를 올바르게 주고받기 위해 합의된 규칙이나 방법을 의미한다. 현대 인터넷은 호스트 간 패킷을 교환하는 방식으로 대부분 패킷 교환 방식을 사용한다.패킷은 택배와 유사한 개념으로,  1. 우선 페이로드를 담고2. 도착지 정보인 헤더를 작성하고 첨부3. 네트워크 장비를 통해 발송 과정을 거친다. 즉, 서로 다른 통신 장치들이 정보를 주고받..

[백준 골드5] 2023 신기한 소수

https://www.acmicpc.net/problem/2023 자릿수가 한 개인 소수 2,3,5,7을 시작으로 탐색한다. 이어서 자릿수가 두 개인 현재 수 * 10 + a를 계산하여 이 수가 소수인지 판단하고,소수라면 재귀 함수로 자릿수를 하나 또 늘린다.단 a가 짝수인 경우 항상 2를 약수로 가지므로 가지치기로 a가 짝수인 경우를 제외한다.이런 방식으로 자릿수를 N까지 확장했을 때 그 값이 소수라면 해당 값을 출력한다. 이러한 방식으로 DFS를 이용한 탐색이 가능하다. #include #include #include #include #include #include #include #include #include #include #include using namespace std;int N;void ..

인공지능 - 상태 기계 설계 해시맵 이용하기

게임 인공지능 구현에 빠질 수 없는 것이 있다.State Machine Behaviors 상태 기계 행위이다. 아주 간단한 게임에서는 AI는 항상 같은 행위를 한다.다음과 같은 3가지 행위를 가지는 AI가 있다고 가정해보자. 플레이어 쫒아가기흩어지기플레이어로부터 멀어지기이러한 행위의 변화를 표현하는 한 가지 방법으로 각 행위가 하나의 상태를 가지는상태 기게 (State Machine)이란 것이 있다. 상태 기계 설계하기 상태 그 자체는 부분적으로 하나의 상태 기계만 정의한다.그래서 상태 기계 설계에 있어서 상태 기계를 변경하거나상태 기계 간 전이하는 방법을 결정하는 것이 중요하다. state 상태를 구분할 때는 주로 enum class를 사용한다.enum class 혹은 enum을 사용하면switch 문..

그래픽스/OpenGL 2024.10.27

네트워크 거시적으로 살펴보기

개발자와 네트워크에 대한 이야기를 조금 해보겠다.개발자가 네트워크를 이해하면 구체적으로 어떤 점에서 유리할까? 개발자의 업무는 크게 두 종류로 나뉜다.하나는 프로그램을 만드는 업무, 다른 하나는 만들어진 프로그램을 유지 보수하는 업무이다.네트워크 지식은 두 가지 업무에 모두 도움을 줄 수 있다. 따라서 채용 시 네트워크에 대한 지식을 강조하거나검증하는 기업이 존재한다. 프로그램을 만드는 업무에서 네트워크 지식을 활용하는 경우 먼저 프로그램을 만드는 업무에서 어떤 경우에 네트워크 지식이 활용될까?프로그래밍 언어나 웹 프레임워크 혹은 라이브러리를 사용할 때 네트워크에 대한배경지식이 있어야만 활용할 수 있는 기능들이 있다. 예를 들어 TCP/UDP와 같은 네트워크에 대한 지식이 없다면스프링 프레임워크의 기능을..

DX11 - 쉐이딩(Blinn-Phong Shading)

쉐이딩은 조명과 재질의 상호작용을 고려해서 색을 결정하는 과정이다. 이때 vs에서 미리 색을 결정해서 ps에서 보간하는 방법이 있고, 쉐이딩 알고리즘 자체를 ps에서 하는 방법이 있다. 둘 중에 어느 것이 다 빠르나면, 픽셀수에 비해 vertex의 수가 훨씬 적기 때문에 vs에서 돌리는 것이 더 빠르다. 대신에 렌더링의 상세도는 조금 떨어질 것이다. 요즘에는 GPU가 많이 빨라졌기 때문에 ps에서 돌리는 경우도 많다. 오늘은 ps에서 blinn-pong shading을 구현한다. 회전 회전을 할 때는 어떤 회전 축에 대해 회전할 것인지 정해야한다. DX는 왼손 좌표계를 사용하고 있기 때문에 Y축을 기준으로 회전시킨다면, 왼손을 엄지를 위로 쭉 펴고 나머지 손가락들을 감아주는 방향으로 회전하는 것과 같다...

그래픽스/DX11 2024.10.25