KDT Unity 2주차~4주차 - 팀과제 2
해당 내용의 전부는 학원에서 배우는 것이기 때문에 공개가 어렵습니다.
해당 내용의 자세한 강의가 필요하신 분들은 이곳에서 확인하시면 됩니다.
2023-11-20 TIL
알고리즘 문제
오늘의 알고리즘 문제 : 나누어 떨어지는 숫자 배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
1
2
3
4
5
6
public class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = new int[] {};
return answer;
}
}
해결
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
public class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = new int[] {};
// 새로운 배열의 크기값을 받는 변수
int newAnswerLength = 0;
// 배열 오름 차순 정렬
Array.Sort(arr);
for(int i = 0; i < 2; i++)
{
// 새로운 배열의 인덱스번호를 나타내는 변수
int length=0;
// 같은 for문을 2번 중복해서 돌려야하므로 2중 for문 사용
for (int j = 0; j < arr.Length; j++)
{
// 1. 새로운 배열의 크기를 알아내는 if문
if (arr[j] % divisor == 0 && i == 0) ++newAnswerLength;
// 3. 조건에 만족하는 값을 배열에 넣는 if문
if (arr[j] % divisor == 0 && i == 1) answer[length++] = arr[j];
}
// 2. 알아낸 인덱스의 값을 기준으로 배열 초기화
if(i==0) answer = new int[newAnswerLength];
}
// 4. 배열에 들어간 값이 없을 때 answer은 {-1}을 반환하는 삼항연산자
return answer.Length == 0 ? answer = new int[] {-1} : answer;
}
}
해야할일은 3가지였습니다.
배열을 오름차순으로 정렬
새로운 배열의 길이 구하기
새로운 배열에 값 넣어주기
1번은 간단하게 Array.Sort(arr);를 사용하여 오름 차순으로 만들었습니다.
2번과 3번같은 경우는 같은 for문이 사용되므로 2중for문을 사용했습니다.
그래서 처음 반복이 시작될 때 안쪽 for문에서 배열의 길이를 구해줍니다.
그 후 다음 for문으로 들어갈때 안쪽 for문에서 해당 배열에 값을 넣어줬습니다.
그 후 배열의 길이가 0이 아닐때는 배열을 리턴, 0일때는 new int[] {-1}을 반환합니다.
Array.Sort(arr);으로 해당 배열을 오름차순으로 정렬을 했습니다
하지만 아쉬운점은 처음 Array타입으로 받고 리턴할시 .ToArray를 사용하면 좀더 코드가 명확해지고 빠르다는 점입니다.
스킬 만들기
스킬은 인터페이스를 받아서 만들었습니다.
Interface.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
internal interface ISkill
{
//스킬 이름
string Name { get; }
//툴팁 표기량
int Ability { get; }
//실제 회복or데미지
int AbilityPower { get; }
// 마나 소모량
int Cost { get; }
//스킬 설명
string SkillInfo { get; }
}
Skill.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
internal class Skill : ISkill
{
public string Name { get; }
public int Ability {get; set;}
public int AbilityPower => new Random().Next(0, 10) + Ability;
public int Cost { get; }
public string SkillInfo { get; }
public Skill(string name, int ability, int cost, string skillInfo)
{
Name = name;
Ability = ability;
Cost = cost;
SkillInfo = skillInfo;
}
//몬스터 공격
public void Use(MonsterStatus monster)
{
PlayerInfo.player.MP -= Cost;
int damage = AbilityPower + PlayerInfo.player.AD - monster.DF;
monster.HP -= damage;
Console.WriteLine($"{monster.Name}에게 {Name}(으)로 {damage}의 피해를 입혔습니다.");
}
public void Use(BossMonsterStatus bossMonster)
{
PlayerInfo.player.MP -= Cost;
int damage = AbilityPower + PlayerInfo.player.AD - bossMonster.DF;
bossMonster.HP -= damage;
Console.WriteLine($"{bossMonster.Name}에게 {Name}(으)로 {damage}의 피해를 입혔습니다.");
}
}
GameStart.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
// Random 클래스를 사용하여 무작위로 2개의 인덱스 선택
Random random = new Random();
List<int> selectedNumbers = new List<int>();
while (selectedNumbers.Count < 2)
{
int randomIndex = random.Next(jobSkill.Count);
// 이미 선택한 인덱스인지 확인
if (!selectedNumbers.Contains(randomIndex))
{
string[] skillString = jobSkill[randomIndex];
Skill skill = new Skill(skillString[0], int.Parse(skillString[1]), int.Parse(skillString[2]), skillString[3]);
PlayerInfo.SkillList.Add(skill);
//무한 반복을 막기위한 리스트 추가
selectedNumbers.Add(randomIndex);
}
}
...
Date.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
internal static Dictionary<int, string[]> warriorSkill = new Dictionary<int, string[]>
{
{ 0 , new string[] {"강타", "3", "5", "쌔게때리기"} },
{ 1 , new string[] {"돌진", "6", "8", "전장으로~"} },
{ 2 , new string[] {"마무리 일격", "10", "13", "아직 한발 남았다"} },
{ 3 , new string[] {"두개골 부시기", "15", "17", "뚝!빼기"} }
};
internal static Dictionary<int, string[]> banditSkill = new Dictionary<int, string[]>
{
{ 0 , new string[] {"수리검", "3", "5", "빠른 수리검"} },
{ 1 , new string[] {"암습", "6", "8", "보이지 않는 검이 가장 무서운 법" } },
{ 2 , new string[] {"화둔", "10", "13", "아마테라스"} },
{ 3 , new string[] {"나X환", "15", "17", "졸렬한 풀 냄새가 난다"} }
};
internal static Dictionary<int, string[]> wizardSkill = new Dictionary<int, string[]>
{
{ 0 , new string[] {"지팡이 던지기(물리)", "3", "5", "마법사(물리)"} },
{ 1 , new string[] {"화염구", "6", "8", "단단묵직"} },
{ 2 , new string[] {"물벼락", "10", "13", "X북이 물대포!"} },
{ 3 , new string[] { "블랙홀", "15", "17", "히어로스 오브 더 X톰" } }
};
...
해당 Date테이블에서 가져와 사용합니다.
스킬같은 경우에는 해당 스킬에 맞는 메서드를 실행합니다
오늘의 정리
오늘은 멘탈이 조금 많이 흔들린 날이다.
항상 나와 맞는 사람과는 같이 일 할수는 없는 법인걸 알았다.
그렇기에 이 상황은 나에게 기회가 될수 있다고 생각한다.
나와 맞는 사람들로만 팀을 꾸릴수 있으면 좋겠지만 그렇게 되기까지가 너무나 먼길이다.
그래서 나는 나와 맞지 않는 사람이라도 나의 사람으로 만들기로 노력하기로 했다.
좀더 말을 쿠션감 있고 좀더 설득할수 있는 화법을 연습해보려한다.
