[TIL] 2025-04-02 알고리즘 문제, 대난투 프로젝트
2025-04-02 TIL
알고리즘 문제
문제를 보고 DFS와 BFS로 풀 수 있다는 것은 바로 이해했습니다.
하지만 시간 복잡도를 고려하지 않고 DFS로 바로 풀이했는데 결과적으로 시간초과가 발생하게 됐습니다.
문제 별로 DFS를 응용하여 구현하는 것에 시간도 아직 오래 걸리는 것 같고, 시간 복잡도를 고려하지 못했다는 점에서 아직 미숙한 것 같습니다.
BFS로 풀이할 때에도 시간이 오래 걸렸는데, 대부분의 문제를 DFS로 풀어보다보니 BFS를 사용하는 것에 미숙한 것 같습니다.
이번 기회로 BFS를 제대로 연습해본 것 같고, 이전에 풀어본 문제들도 BFS로 한번씩 풀어보면 좀 더 알고리즘을 잘 익혀볼 수 있을 것 같습니다.
제가 분석한 내용과 풀이한 코드는 다른 게시물로 정리했습니다.
[프로그래머스][C++] 게임 맵 최단거리
이 문제는 처음에 봤을 때 어떤 자료구조와 알고리즘을 사용해야할지 감을 잡지 못했습니다.
그래프와 DFS을 같이 사용해보면서 학습해 볼 수 있는 좋은 문제였습니다.
하지만, 감을 잘 잡지 못해서 시간또한 오래 걸렸고 오류또한 많이 발생하게 됐습니다.
결과적으로 문제는 풀어냈지만 최근들어서 어려움을 많이 느끼고 있다고 생각합니다.
프로그래머스 2레벨 정도부터 제가 어려움을 느끼는 문제라고 생각이 들고, 문제를 풀어내는 실력을 향상시키기 위한 방법을 고안해보아야 할 것 같습니다.
[프로그래머스][C++] 전력망을 둘로 나누기
대난투 프로젝트
프로젝트를 다음과 같이 구상해보고 팀원들과 공유해보았습니다.
게임이 처음 시작된 경우 메인메뉴에서 타이틀 UI를 보여준다.
타이틀 UI에서 무작위 입력이나 특정 키 입력으로 타이틀 UI에서 메뉴 창으로 전환한다.
메인 메뉴UI에서 상하좌우 입력을 받는다.
상하좌우로 포커스되는 UI를 변경한다.
입력된 방향 중 가장 가까운 위젯을 찾아서 UI를 변경해야한다.
특정 키 입력으로 포커스 중인 UI를 클릭처리한다.
특정 UI가 클릭 됐을 경우 해당 로직을 위한 UI로 변환한다.
ex) 옵션 클릭시 옵션 변경을 위한 UI로 변환, 싱글 플레이 클릭시 싱글 플레이를 위한 UI로 전환 등
특정 UI가 단순 버튼일 경우(되돌아가기) 해당 로직을 실행한다.
일단 입력의 경우 마우스 입력만 가능한 것을 기준으로 구현해보는게 우선이다.
만약 입력으로 포커스를 전환하는 UI를 구현한다면 다음과 같이 구현할 수 있을 것이라 판단한다.
UI는 화면의 2D공간에 배치되므로, FVector2D를 사용하여 위치가 관리됩니다.
2D 공간의 벡터 연산을 수행하면 가까운 UI를 찾을 수 있습니다.
- 입력을 4방향으로 받습니다.
- 상하좌우에 대해서 FVector2D로 값을 설정합니다.
- 현재 포커스된 UI의 위치를 가져옵니다.
- 이동할 방향을 계산합니다.
- 현재 위치 - 입력 방향
- 현재 포커스된 위젯에서 다른 UI의 위젯까지의 방향 벡터를 구합니다.
- 자기 자신은 제외해야한다.
- DotProduct함수를 사용해서 두 벡터간 방향을 살펴봅니다.
- -1이면 반대 0이면 직각 1에 가까울수록 방향이 같음
- 방향이 같은 위젯 중 가장 가까운 위젯을 찾습니다.
- 유클리드 거리 기준으로 가장 가까운 위젯
해당 방법을 구현한다면 UI들을 배열을 통해 인덱스로 관리하지 않아도 됩니다.
UI별로 배열을 사용하지 않아도 되므로, 메모리를 효율적으로 사용할 수 있을 것이라고 기대 합니다.
한번 구현을 통해 모든 UI에서 공통적으로 사용할 수 있을 것이라고 기대합니다.
UI간 전환은 어떻게하는가?
- 새로 생성
- 트렌지션 효과와 같이
- 비저빌리티로 관리
- 비저빌리티와 생성 혼합
- 기존 UI는 비저빌리티 처리 새로 생성하는 UI는 동적으로 생성
게임 모드
싱글 플레이(시나리오 모드 - 단계별 AI와의 대전)
플레이어가 전투할 캐릭터를 고르면 전투를 진행한다.
전투를 진행하여 승리하면, 다음 시나리오로 진행한다.
싱글 플레이는 다음과 같은 UI 요소를 가진다.
캐릭터 선택창
전투하게될 레벨
전투할 상대 AI
멀티 플레이 대전(리슨 서버로 플레이어 간 대전)
네명까지 접속 가능
플레이 시작은 2명 혹은 4명 접속시 가능
접속 중인 모든 플레이어가 캐릭터를 선택하고, 플레이어 수가 짝수인 경우 맵 선택으로 넘어간다.
맵을 선택한 경우 전투를 진행한다.
멀티 플레이 대전은 다음과 같은 UI 요소를 가진다.
캐릭터 선택창
모든 플레이어가 캐릭터를 선택할경우 나올 맵 선택 UI
멀티 플레이 협력(리슨 서버로 플레이어 간 협력)
2명의 AI가 필수로 포함
2명의 플레이어가 캐릭터를 선택한 경우, 맵 선택으로 넘어간다.
맵을 선택한 경우 전투를 진행한다.
멀티 플레이 협력은 다음과 같은 UI 요소를 가진다.
캐릭터 선택창
전투할 상대 AI
모든 플레이어가 캐릭터를 선택할경우 나올 맵 선택 UI
멀티의 경우 서버가 먼저 준비하고 클라이언트가 들어가는 식으로 구현
예외의 경우 동작되지 않게
댓글남기기