과정명 : 내일배움캠프 Unity 게임개발 3기
전체진행도 : 17일차
부분진행도 : Chapter2.2 - 6일차
작성일자 : 2024.01.16(화)
개발일지 목록 : 클릭
1. 진행중인 과정에 대해
과제 제출과 발표에 대해 회의, 게임 내 장면의 사이클 위주로 발표를 진행하고, 시연에서 혹여나 빠진 내용은 슬라이드에 별첨하여 설명을 할 예정. 팀원 각자의 소감을 발표 마지막에 배치할 예정이다.
티스토리 글작성이나 테마 그리고 코드블럭 등의부분에서 불편하다고 느껴져서 내일 글부터는 Velog를 사용 해 볼 생각이다.
2. 오늘 학습에 대해
(1) 알고리즘 풀이 : 풀이 중 검색을 했던 내용을 위주로 작성
프로그래머스 - 두 개 뽑아서 더하기
- 전체 코드
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[] {};
// 동적관리를 위한 List<int> 사용
List<int> answerList = new List<int>();
for(int i=0; i<numbers.Length-1; i++){
for(int j=i+1; j<numbers.Length; j++){
int sum = numbers[i]+numbers[j];
if (!answerList.Contains(sum)) {
answerList.Add(sum);
}
}
}
answerList.Sort();
answer = answerList.ToArray();
return answer;
}
}
- 코드 특징
- 좋은 로직이 떠오르지 않아 정공법 작성
- 매번 나오는 값을 array에 추가하야 하는 경우 동적 관리를 위해 List로 바꾸어 사용하는 것이 좋다.
- List와 그 메서드는 아래와 같이 사용 가능
// 리스트를 사용하기 위해 using
using System.Collections.Generic;
// 리스트에 요소를 추가
answerList.Add(value);
// 리스트 내에 요소가 들어있는지 확인
if (!answerList.Contains(value)) {}
// 리스트 정렬
answerList.Sort(); // 리스트 정렬
// answerList라는 List<T> 객체의 모든 요소를 포함하는 새로운 배열을 생성 후, answer라는 배열 변수에 할당
answer = answerList.ToArray();
프로그래머스 - 가장 가까운 같은 글자
- 전체 코드
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(string s) {
int[] answer = new int[s.Length];
// O(N^2)도 되겠지만, 더 효율적인 알고리즘으로...
// s가 영어 소문자로만 이루어져 있다고 하니, 26개 소문자의 index 리스트를 작성하자
Dictionary<char, int> alphaIndex = new Dictionary<char, int>();
// a부터 z까지 -1 설정
for (char c = 'a'; c <= 'z'; c++) {
alphaIndex.Add(c, -1);
}
// s를 처음부터 순회하며 answer와 alphaIndex 갱신
for (int i = 0; i<s.Length; i++){
if(alphaIndex[s[i]]==-1) answer[i] = -1;
else answer[i] = i-alphaIndex[s[i]];
alphaIndex[s[i]] = i;
}
// 시간복잡도 O(N)
return answer;
}
}
- 코드 특징
- 시간복잡도 O(N)으로 해결
- 사전형에 26개의 알파벳을 키로 갖는 index를 마련하여, s를 순회하며 매 문자마다 즉각 갱신
- C#에서 영문 소문자 26개를 key로, int형을 value로 쓰는 사전형을 사용하는 법
- Dictionary<char, int> 타입을 사용하여 수행. 아래와 같이 사용 가능
// 사전형을 사용하기 위해 using
using System.Collections.Generic;
// 선언과 초기화
Dictionary<char, int> dict = new Dictionary<char, int>();
// 키값 'a'부터 'z'까지, -1 값으로 로 초기화
for (char c = 'a'; c <= 'z'; c++) {dict.Add(c, -1);}
// 사전형 값 설정
dict['a'] = 1; // 'a'의 값을 1로 설정
// 미리 설정해주지 않은 키 값에 위 구문처럼 값을 대입하려고 하면, KeyNotFoundException 발생
// TryGetValue, ContainsKey 메서드를 사용하여 키가 존재하는지 확인하는 조건문을 두면 좋음
if (dict.TryGetValue('a', out value)) {}
if (dict.ContainsKey(key)) {}
// 사전 내용 출력
foreach (KeyValuePair<char, int> entry in dict) {
Console.WriteLine($"Key: {entry.Key}, Value: {entry.Value}");
}
3. 과제에 대해
- 발표 돕기
- Velog 환승작업
4. 참고자료
- 없음
반응형
'다이어리 > 내일배움 개발일지' 카테고리의 다른 글
게임개발캠프 - 개인과제(B) 1일차, 팀 셔플 (0) | 2024.01.18 |
---|---|
게임개발캠프 - 팀과제(B) 7일차, 과제 발표 (0) | 2024.01.17 |
게임개발캠프 - 팀과제(B) 5일차, 개발 마무리 (1) | 2024.01.15 |
게임개발캠프 - 팀과제(B) 4일차 (2) | 2024.01.12 |
게임개발캠프 - 팀과제(B) 3일차 (0) | 2024.01.11 |