1. 활동 내역

1) 유니티

Untitled

오브젝트 생성, 카메라 이동, 오브젝트와 컴포넌트 연결하기와 같은 유니티 사용법과 클래스와 상속을 포함한 c# 문법을 공부하였다.

Untitled

Untitled

if else 판정과 디버그 콘솔 출력, 함수선언 후 거리를 구해보며 c#과 유니티의 구조에 대해 학습하였다. (181pg까지)

2) 알고리즘 문제해결 전략

  1. 분할 정복(176-206p)

부분 문제로 나눈 뒤 재귀를 이용해서 문제를 해결하는 방법이다. 일반 재귀와 다른 점은 부분 문제를 나눌 때 구성 요소들을 비슷한 크기로 절반에 가깝게 나누어 문제를 해결한다. 분할 정복 문제라 판별했을 때는 문제를 해결하기 위한 세 가지 구성 요소를 구현할 방법을 생각해 보아야 한다

  1. 문제를 더 작은 문제로 분할하는 과정.
  2. 각 문제에 대한 답을 원래 문제에 대한 답으로 합치는 과정
  3. 분할하지 않고 답을 바로 구할 수 있는 가장 작은 바닥 조건 = 문제를 둘 이상의 부분으로 나누는 자연스러운 방법이 존재해야 함.

분할 정복은 같은 작업을 빠르게 처리해줄 수 있다는 점에서 의의가 있다.

해결한 문제) 4779번 칸토어 집합

#include <stdio.h>
int arr[540000];

void find(int n1, int n2)
{
    if (n1 == 1)
    {
        return;
    }
    int m = n1 / 3;

    find(m, n2);
    for (size_t i = 0; i < n2; i++)
    {
        if ((i / m) % 2 != 0)
        {
            arr[i] = 1; // 1은 공백 출력
        }
    }
}

int main(void)
{
    int num;
    int thd;
    int c;
    while (1)
    {
        thd = 1;
        c = scanf("%d", &num);
        if(c == -1){
            break;
        }
        for (size_t i = 0; i < num; i++)
        {
            thd *= 3;
        }
        find(thd, thd);
        for (size_t i = 0; i < thd; i++)
        {
            printf("%c", arr[i] == 0 ? '-' : ' ');
        }
        printf("\\\\n");
    }
    return 0;
}

분할 정복의 적용