전체 글(178)
-
Unity 2D - 2. 아틀라스와 애니메이션
아틀라스 오늘은 아틀라스를 분리해서 사용하는 방법으로 시작해 볼 것이다. 사진 파일을 보면, 여러가지 형태가 하나의 사진으로 합쳐져 있을 것이다. 이것을 분리해서 사용하는 방법을 알아볼 것이다. 아틀라스를 사용하는 이유를 알아보자. Game창에 보면 Stats라는 것이 있다. 하나의 파일을 사용하면 Batches라는 것이 줄어들게 된다. (Batch : 그래픽을 그리기 위해 메모리와 CPU를 사용한 횟수). 아틀라스의 스파라이트끼리는 Batch가 늘지 않는다. =>요약하자면, 최적화를 위해서 해주는 것이다. 우선은 Unity창에서 사진을 선택 후 Inspector 창을 본다. Sprite Mode를 Single이 아닌 Multiple로 선택을 해준다. 그 후에, Sprite Editor를 눌러주게 되면,..
2023.07.20 -
Week 2 (자료구조) - 문제 2493번 (탑)
문제: KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오른쪽 방향으로 차례로 세우고, 각 탑의 꼭대기에 레이저 송신기를 설치하였다. 모든 탑의 레이저 송신기는 레이저 신호를 지표면과 평행하게 수평 직선의 왼쪽 방향으로 발사하고, 탑의 기둥 모두에는 레이저 신호를 수신하는 장치가 설치되어 있다. 하나의 탑에서 발사된 레이저 신호는 가장 먼저 만나는 단 하나의 탑에서만 수신이 가능하다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에 일렬로 서 있고, 모든 탑에서는 주어진 탑 순서의 반대 방향(왼쪽 방향)으로 동시에 레이저 신호를 발사한다고 하자. 그러면, 높..
2023.07.20 -
Week 2 (자료구조) - 문제 10799번 (쇠막대기)
문제: 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이다. 이러한 레이저와 쇠막대기의 배치는 다음과 같이 괄호를 이용하..
2023.07.19 -
Unity 2D - 1. 프로젝트 준비하기 + 에셋 다운로드
우리는 여태까지 Unity 3D를 연습했었다. 한 개의 프로젝트가 완성되었으니, 이번에는 2D를 진행하여 보자. 보는 바와 같이 2D 프로젝트를 하나 만들면, 다음과 같이 생성된다. 이것을 보면 3D와는 다르게 빛을 나타내주던 Light는 없고, Main Carmera만 있는 것을 확인할 수 있다. Main Carmera를 누르고 Inspector 창에 나타난 것들 중에, Background를 누르면 색상을 조절할 수 있다. Sprite SpriteRenderer : 스프라이트를 보여주는 컴포넌트 (Inspector 창의 Transform 아래에 있는 것) 2D 오브젝트 중 Sprite에 대하여 배워보자. 우선 Sprite를 생성해 보자. 다음과 같이 생성된다. 그리고 Sprite에 InputFieldB..
2023.07.19 -
Dynamic Programming (동적 계획법)
Dp란? 하나의 큰 문제를 여러개의 작은 문제로 나누어서 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것이다. (코딩테스트 단골 문제이며, 숫자의 범위가 크거나 경우의 수가 엄청 많은 문제들이 나올 때, 써야 하는 방법이다.) Dp를 사용하는 이유 Dp는 재귀의 업그레이드 버전이라고 볼 수 있다. 동일한 함수를 다시 불러서 사용하는 건데, 다만 점화식 형태처럼 계산이 복잡하다. 그래서 수행해야 할 명령들이 기하급수적으로 늘어날 수 있다. (ex. 피보나치 수를 계산하는 방법은 return f(n)=f(n-1)+f(n-2)이다. n이 100일 때를 구한다면 함수 호출 횟수는 엄청나게 많을 것이고, 약 90만년 정도가 소요된다.) 요약하면, 재귀를 응용하는 것보다 시간 복잡도를 낮출 좋은 방법이 Dp..
2023.07.18 -
Week 2 (자료구조) - 문제 1406번 (에디터)
문제: 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다. 이 편집기가 지원하는 명령어는 다음과 같다. 초기에 편집기에 입력되어 있는 문자열이 주어지고, 그 이후 입력한 명령어가 차례로 주어졌을 때, 모든 명령어를 수행하고 난 후 편집기에 입력되어 있는 문자열을 구하는 프로그램을 작성하시오. 단, 명령어..
2023.07.18