목록2024/12 (9)
게임 개발 로그
1. 설거지 시스템WashingArea설거지 시스템이 구현되는 공간에 대한 클래스다. WasingArea는 WashingUI, Plate를 참조하여 가지고 있다. 역할Plate 풀링: WashingArea는 Plate를 담은 Queue와 List가 있다. 사용 가능한 접시를 Queue에 넣어두고 있으며, 사용할 때는 Queue에서 꺼내서 List에 담는다.Plate 생성: WashingArea에는 CreatePoint(Vector3)가 있다. 이 CreatePoint에서 Plate를 생성하는 역할을 한다. Plate를 생성할 때는 난이도(level)에 따라 Plate의 hp와 한번에 생성되는 Plate의 개수를 랜덤성을 적용하여 생성한다.Plate 삭제: 현재 선택된 Plate(selectPlate)의..
문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 성공 코드 머지 소트를 연습하기 위해서 머지 소트를 구현해 봤다. 첫 제출에 시간 초과로 실패가 떴는데, 그 이유는 입출력 속도 탓이었다. 버릇처럼 endl을 사용하는 바람에 시간 초과가 떴고, endl 대신 "\n"을 넣어서 성공할 수 있었다.#include #include using namespace std;vector nums..
병합 정렬 병합 정렬은 분할 정복 방식을 사용해 데이터를 분할하고 분할한 집합을 정렬하며 합치는 알고리즘으로, 시간 복잡도는 O(nlogn)이다. 투 포인터 개념을 사용하여 배열의 원소를 나누며, 왼쪽, 오른쪽 그룹을 병합해간다. 왼쪽 포인터와 오른쪽 포인터의 값을 비교하여 작은 값(혹은 큰 값)을 배열에 추가하고, 포인터를 한 칸씩 이동시키는 방식이다. 합병 정렬 또는 병합 정렬(영어: merge sort 머지 소트[*])은 O(n log n) 비교 기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. (위키백과 발췌) n-way 합병 정렬의 개념은 다음과 같다.정렬되지 않은 리스트를 각각 하나의 원소만 포함하는 n개의 부분리스트로..
문제수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. 입력첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109) 출력A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다. 실패 코드실패 이유: 시간 초과 - vector를 사용하여 동적할당하던 것에서 전역변수로 바꿔 배열을 선언했는데도 시간 초과가 뜸.- Quick Selection Sort라는 것을 이용하여 필요한 부분만 Sorting을 하고 있는데도 시간 초과가 뜸.- cin, cout 등 입출력 속도를 향상시킬 수 있도록 명령어를 추가했는데 ..
퀵 정렬 퀵 정렬은 기준값을 선정해 해당 값보다 작은 데이터와 큰 데이터로 분류하는 것을 반복해서 정렬하는 알고리즘이다. 평균 시간 복잡도는 O(nlogn)이며 최악의 경우 O(n^2)의 시간 복잡도를 가진다. 퀵 정렬의 내부 루프는 대부분의 컴퓨터 아키텍처에서 효율적으로 작동하도록 설계되어 있고(그 이유는 메모리 참조가 지역화되어 있기 때문에 CPU 캐시의 히트율이 높아지기 때문이다.), 대부분의 실질적인 데이터를 정렬할 때 제곱 시간이 걸릴 확률이 거의 없도록 알고리즘을 설계하는 것이 가능하다. 또한 매 단계에서 적어도 1개의 원소가 자기 자리를 찾게 되므로 이후 정렬할 개수가 줄어든다. 때문에 일반적인 경우 퀵 정렬은 다른 O(n log n) 알고리즘에 비해 훨씬 빠르게 동작한다. 이러한 ..
문제인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. ..
방문자 패턴(Visitor Pattern)이란?위키백과 정의방문자 패턴은 객체 구조에서 분리시키는 디자인 패턴이다. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나이다. 방문자 패턴을 이용하게 되면 객체에 방문한 방문자는 구조체의 특정 요소를 작업할 수 있다. 그래서 객체를 직접 수정하지 않아도 방문자에게서 새로운 기능을 얻게 된다. 즉, 방문자 패턴으로 객체의 구조를 탐색하고 객체의 요소에 작동하며 수정하지 않고 기능을 확장하는 것이 가능하다. 이 책에서는 이 방문자 패턴을 이용하여 파워업 등의 부스터로 개체의 단일 능력을 향상시키는 것을 구현했다. ※ 파워업 매커니즘: 여러 속성을 동시에 강..
0. 구현Managers GameManagerEventBusManagerLoadingSceneManagerSoundManager GameManager게임 진행 중인지 판단 및 점수/시간 기록, 게임 오버 판단 등을 담당함.public class GameManager : SingleTon{ public bool bGameOver = false; public int score = 0; public int enemyScore = 0; public float time = 60; public bool isPlaying = true; private void Update() { if (isPlaying) { time -= Time.d..
PlayerPrefs유니티의 PlayerPrefs는 게임 세션 간에 플레이어 기본 설정을 저장하는 클래스다. 문자열, 부동 소수점 및 정수 값을 사용자의 플랫폼 레지스트리에 저장할 수 있다. 주의: Unity는 암호화 없이 로컬 레지스트리에 PlayerPrefs를 저장하기 때문에 민감한 데이터를 저장하면 안 된다. 레지스트리 위치HKEY_CURRENT_USER/Software/Unity/UnityEditor/CompanyName/projectName 저장PlayerPrefs.SetString/SetInt/SetFloat... 등을 이용해서 값을 저장할 수 있다. // Saveif (Input.GetKeyDown(KeyCode.S)){ string setID = "Inha2024"; ..