오늘의 목표

코드카타

UI 아이템 슬롯 연동

 


 

코드카타

 

[문제] 덧칠하기

 

<내 풀이>

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

bool Is_painting_completed(int painted[], section_len)
{
    for (int i = 0; i < section_len; ++i)
    {
        if (!painted[i])
        {
            return false;
        }
    }
    
    return true;
}

// section_len은 배열 section의 길이입니다.
int solution(int n, int m, int section[], size_t section_len) {
    int answer = 0;
    
    int painted[] = {1};
    int section_index = section[0];

    // 디버그용 출력
    for (int i = 0; i < section_len; ++i)
    {
        printf("painted[%d] : %d", i, painted[i]);
    }
    
    // 모두 칠해져있는지 확인
    while(!Is_paintin_completed)
    {
        for (int i = section_index; i < section_len + n; ++i)
        {
            painted[i] = 1;
        }
    }
    
    return answer;
    
    
}

 

[사고 과정]

int painted[] 배열에 칠해진 벽은 1, 칠해지지 않은 벽은 0으로 넣어서 아직 칠해지지 않은 벽을 차례대로 칠하려고 했다.

페인트칠이 완료되었는지 Is_painting_completed() 함수를 통해서 반복문 안에서 매번 확인하려고 했다.

 

[해답]

#include <stdio.h>

int solution(int n, int m, int section[], size_t section_len)
{
	int answer = 0;
    int current_painted_end = 0;
    
    for (int i = 0; i < section_len; ++i)
    {
    	if (section[i] > current_painted_end)
        {
        	// 새로운 롤러질 시작 (횟수 증가)
            answer++;
            // 롤러가 닿는 마지막 지점 갱신
            current_painted_end = section[i] + m - 1;
           	
        }
    }
    return answer;
}

 

그리디 알고리즘을 적용.

그리디 알고리즘을 적용할 수 있는 조건

1. 탐욕적 선택 속성 : '지금의 최선의 선택'이 전체 최선에 포함.

2. 최적 부분 구조 : 부분 문제의 최적해가 전체 최적해의 일부

 

이번 문제의 경우 칠해지지 않은 벽을 하나씩 칠하는 것이 전체 최선의 선택이자, 전체 최적해의 일부가 된다.

따라서 그리디 알고리즘 적용 가능. 

 

 

 

 

'Unreal5 공부 > TIL' 카테고리의 다른 글

20206/07/13 TIL  (0) 2026.07.14
2026/07/09 TIL  (1) 2026.07.09
2026/07/02 TIL  (0) 2026.07.02
2026/06/26 TIL  (0) 2026.06.24
2026/06/22 TIL  (0) 2026.06.22

+ Recent posts