01
16

과정명 : 내일배움캠프 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. 참고자료

  • 없음
반응형
COMMENT