해당 시스템이 동작하는 구조의 시작부터 과정을 자세하게 분석, 나열해봅시다. 1. 행성이라는 Stage에서 아이템을 파밍하는것이 목적이고 파밍한 아이템을 판매하여 목표금액을 달성하는 게임 2. 행성마다 목표금액을 달성 못하면 GameOver 3. 행성마다 위험요소(다양하고 참신한 괴물 과 함정)를 파훼하며 아이템을 파밍한다. 4. 목표금액보다 돈을 많이 벌면 그 돈으로 유리한 플레이를 할 수있는 아이템을 구매 가능 5. 이 과정을팀원(4인 협동)들과 같이 플레이를 함.
직접 분석해본 내용 중 가장 핵심이 되는 구성 요소는 무엇이라 생각하나요?
위험요소(다양하고 참신한 괴물 과 함정) 다양한 위험요소들이 많기에 플레이를 하며 각각 파훼법을 익히며 재미를 느낄 수 있고 플레이하는 유저들은 계속 긴장감을 가져 공포라는 장르를 잘 살림.
4인 협동하여 목적을 달성 협동을 하여 각종 위험요소들을 더 쉽게 피할수도 있지만, 오히려 사람이 많아져서 파훼하기 더 어려워지는 도전요소들로 인하여 더욱 재밌는 장면이 나올 수 있음.
어떤 장르에 속하지 않고 , 기획자가 제안하면 구현 할 수 있는 능력과 더 재미있게 만들 수 있을것 같으면 오히려 내가 제안을 하는 게임개발자(클라이언트 프로그래머)가 되고싶습니다.
그 외에 Untiy 트랙에 기대하는 것이 있다면 자유롭게 작성해 주세요.
협업 프로젝트 경험을 많이 쌓고 싶고 , 현업 및 실무에서 어떤 기술들을 익히면 좋은지를 배우고 싶습니다.
Unity 퀘스트 달리기 반
1.홀수 출력
bool odd_Check(int num)
{
if (num % 2 != 0)
{
return true;
}
return false;
}
//for문 사용
Console.WriteLine("for문 사용");
for (int i = 1; i <= 100; i++)
{
if (odd_Check(i))
{
Console.WriteLine(i);
}
}
Console.WriteLine("");
//while 문 사용
Console.WriteLine("while문 사용");
int num = 1;
while (num <= 100)
{
//for문 사용
if (odd_Check(num))
{
Console.WriteLine(num);
}
num++;
}
Console.WriteLine("");
//do-while 문 사용
Console.WriteLine("do -while문 사용");
num = 1;
do
{
if (odd_Check(num))
{
Console.WriteLine(num);
}
num++; ;
} while(num <= 100);
3.팩토리얼 계산
Console.Write("Enter a number : ");
string input = Console.ReadLine();
int num = 0;
int result = 1;
int.TryParse(input,out num);
if(num <= 0)
{
Console.Write("0 이하의 숫자가 감지되었습니다.");
return;
}
for (int i = 1; i <= num; i++) result *= i;
Console.WriteLine("Factorial of " + num + " is " + result);
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다.
예를들어
- 0ms 시점에 3ms가 소요되는 A작업 요청
- 1ms 시점에 9ms가 소요되는 B작업 요청
- 2ms 시점에 6ms가 소요되는 C작업 요청
와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다.
한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다.
- A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms)
- B: 1ms부터 대기하다가, 3ms 시점에 작업을 시작해서 12ms 시점에 작업 완료(요청에서 종료까지 : 11ms)
- C: 2ms부터 대기하다가, 12ms 시점에 작업을 시작해서 18ms 시점에 작업 완료(요청에서 종료까지 : 16ms)
이 때 각 작업의 요청부터 종료까지 걸린 시간의 평균은 10ms(= (3 + 11 + 16) / 3)가 됩니다.
하지만 A → C → B 순서대로 처리하면
- A: 3ms 시점에 작업 완료(요청에서 종료까지 : 3ms)
- C: 2ms부터 대기하다가, 3ms 시점에 작업을 시작해서 9ms 시점에 작업 완료(요청에서 종료까지 : 7ms)
- B: 1ms부터 대기하다가, 9ms 시점에 작업을 시작해서 18ms 시점에 작업 완료(요청에서 종료까지 : 17ms)
이렇게 A → C → B의 순서로 처리하면 각 작업의 요청부터 종료까지 걸린 시간의 평균은 9ms(= (3 + 7 + 17) / 3)가 됩니다.
각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다)
제한 사항
jobs의 길이는 1 이상 500 이하입니다.
jobs의 각 행은 하나의 작업에 대한 [작업이 요청되는 시점, 작업의 소요시간] 입니다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
//sort 정렬 : 시간복잡도 N , 우선순위 큐 : 시간복잡도 : log n
//이기에 우선순위큐를 이용하여 minheap으로 정렬함
priority_queue<char,vector<char>,greater<char>> pq_skip;
for(char ch : skip) { pq_skip.push(ch);}
char pivot = 'a'; //알파벳 배열에 넣을 시작 문자
vector<char> alpabet;
while(pivot <= 'z')
{
//해당 알파벳이 skip문자열에 있는경우 알파벳 배열에 넣지 않는다.
if( pq_skip.top() != pivot) { alpabet.push_back(pivot); }
else { pq_skip.pop(); }
pivot++;
}
//문자열 s 길이만큼 순회하며 문자를 변환한다.
int result;
for(int i = 0; s.size() >i;i++)
{
//문자열 s의 단일문자가 알파벳배열의 어디에 위치하는지 찾는다.
int alpabet_index = find(alpabet.begin(),alpabet.end(),s[i]) - alpabet.begin();
//찾은 단일문자위치에 인자값index를 더하여 최종 위치를 찾는다.
result = alpabet_index + index;
//만약 알파벳 사이즈를 초과한 경우 , 알파벳 사이즈만큼 뺀다.
while(result> alpabet.size()-1 )
{
result -= alpabet.size();
}
answer += alpabet[result];
}
return answer;
}
해당 문제를 이렇게 풀었지만 , 다른 사람 풀이를 보니 더욱 가독성 좋고 쉽게 풀이한게 있어 코드를 첨부한다.
다른사람 풀이
#include <string>
#include <vector>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
for(auto v : s)
{
int t = 0; //다음 문자로 넘어간 숫자를 카운트하는 변수
int c = v - 'a'; //문자v에서 'a'를 뺌으로 알파벳의 위치순서를 파악
while(t < index)
{
c++;//다음 알파벳위치(알파벳 변환)
v = (c % 26) + 'a';//해당 알파벳 위치를 문자열로 변환(v는 char 자료형)
//c%26은 알파벳이 총 26개 이기 때문에 큰 숫자가 들어와도 알파벳의 한 형태로 변환 가능하기떄문
//skip문자열에 해당 문자(v)가 있는지 체크
if(skip.find(v) == string::npos)
{
//없으면 카운트를 증가시킴
t++;
}
}
answer += v;
}
return answer;
}