본문 바로가기

TIL

[TIL]2024-3-14 / 56일차 - 최종 프로젝트 2주차 4일차

우리 게임은 귀여운 캐릭터들이 서로 협동하는 게임입니다. 네.

 

1. 오늘의 기술 면접 질문 - 가비지 컬렉션이란 무엇인지 설명해주세요

가비지 컬렉션은 더 이상 참조되지 않은 객체를 해제하여 메모리 누수를 방지하는 프로세스입니다. 

모든 메모리를 순회하는 것보다 효율적인 관리를 위해 3세대의 힙 메모리로 나뉘어 관리되는데, 
새로 만든 개체는 0세대 메모리에 할당되며 이것이 넘치게 되면 가비지 컬렉션이 일어나고 
아직 참조되고 있는 객체들(라이브 객체들)은 오래된 순서대로 1세대 -> 2세대로 승격되는데 
2세대로 갈 수록 할당되는 메모리가 커지게 됩니다. 

만약 2세대 메모리도 넘치게 된다면 모든 세대에 대한 기비지 컬렉션이 실행되게 됩니다. 
이때는 프로그램이 멈추며 가비지 컬렉션이 진행되기 때문에 
이러한 일이 일어나지 않도록 유의해야 합니다.

가비지 컬랙션의 과정은 크게 3가지 주기를 통해 이루어지며

루트 목록을 돌며 각 루트가 참조하는 것을 마킹하여 라이브 객체 목록을 생성하는 표시 단계(Marking)

이러한 루트 목록에서 도달할 수 없는(사용되고 있지 않는) 객체를 가비지로 간주하여 
비어 있는 공간으로 취급되도록 만드는 재배치 단계(Relocating)

힙 영역을 순회하며 비어 있는 가비지의 공간에 
도달 가능한 라이브 객체로 메모리를 덮어 씌우고 조정하는 압축 단계(Compacting)로 이루어져 있습니다.

2. 오늘의 알고리즘 코드카타 - 로또의 최고 순위와 최저 순위

 

답안 :

//순서가 상관없는 점이 다행, 겹치는 수도 없다
//맞는 갯수를 세고 알아볼 수 없는 갯수를 세야함

using System;
using System.Linq;

public class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        
        int correct = 0;
        int unrecognizableCount = 0;
        
        //로또 번호만큼 돌려서 0의 갯수와 맞는 갯수를 세기
        for(int i = 0; i < lottos.Length; i++)
        {
            if(lottos[i] == 0)
                unrecognizableCount++;
            if(lottos.Contains(win_nums[i]))
                correct++;
        }
        
        //최대(0이 다 맞는 상황), 최소 랭크(0이 다 틀릴 상황)
        //7에서 빼는 이유는 2개는 맞추어야 5등이기 때문
        int maxRank = 7 - (unrecognizableCount + correct);
        int minRank = 7 - correct;
        //테스트 돌려보니 모두 틀렸을 때는 7등이라는 수가 나와버려서
        //맞는 것이 0개가 되는 상황 때는 1을 빼주는 조건문
        if(maxRank == 7)
            maxRank -= 1;
        if(minRank == 7)
            minRank -= 1;
        
        int[] answer = new int[] {maxRank, minRank};
        return answer;
    }
}

 

슬슬 문제가 설명이 너무 고봉밥이 되고 있다.


3. 오늘의 작업

현시점에 필요한 UI작업은 거의 다 끝난 상태이며 다른 작업을 기다려야 하고

나는 코딩 부분보다 별개의 부분들을 많이 담당하고 있다보니

우선 어제 그렇게 고민하던 스프라이트 작업이나 좀 들어갔다.

 

귀여운 짤로 요약이 가능하다.

 

끼아아아아아아악

 

 

그리고 오브젝트 배치를 해보기 위해

맵 데이터화에 가장 영향을 안받는 고정형 오브젝트들 부터 만들어 보고 있다.

 

 

단순히 가시를 달아 놓을까 하다가 심심할 것 같아 톱날 오브젝트를 그려 만들어 보았다.

 

 

귀엽지 않은가?

 

추가적으로 중간 발표일이 예상보다 1주일 빨라진 바람에

준비해야 할 것이 많아져 버렸다.

 

부담 갖지 말라고는 하지만 안가질 수가 없지 않은가!