C++

[C++] 5월 30일 코딩 테스트 수업

k-codestudy 2025. 6. 1. 16:44

프로그래머스 LV.5 미로 주행 테스트

이거 답이 다르게 나와서 수정이 필요함 ( 어디서 잘못 한건지... )

#pragma once
#include <stdio.h>
#include <stdlib.h>

class C_MAZE
{
private:
	char m_arMap[101][301];
	int m_arCount[10];

private:
	void fillBuffer(int nX, int nY, int nCount, int nFlag);

public:
	C_MAZE() = default;
	void fill(int nX, int nY, int nD, int nFlag);
	void print();
};

 

#include "maze.h"

void C_MAZE::fillBuffer(int nX, int nY, int nCount, int nFlag)
{
    if (nY >= 101 || nY < 0)
        return;

    int nStart = nX;
    if (nStart < 0)
        nStart = 0;

    int nEnd = nX + nCount - 1;
    if (nEnd >= 301)
        nEnd = 301 - 1;

    for (int i = nStart; i <= nEnd; i++)
    {
        if (nFlag == 1)
        {
            m_arMap[nY][i]++;
            int nDepth = m_arMap[nY][i];
            m_arCount[nDepth]++;
        }
        else
        {
            int nDepth = m_arMap[nY][i];
            m_arCount[nDepth]--;
            m_arMap[nY][i] = 0;
        }
    }

}

void C_MAZE::fill(int nX, int nY, int nD, int nFlag)
{
    int nLength = nX * 2 + 1;
    int nStart = nX - nD;
    int nUp = nY;
    
    while(nLength >= 1)
    {
        fillBuffer(nStart, nUp, nLength, nFlag);
        nLength -= 2;
        nUp--;
        nStart++;
    }

    nStart = nX - nD + 1;
    nLength = nD * 2 - 1;
    int nDown = nY + 1;
    
    while (nLength >= 1)
    {
        fillBuffer(nStart, nDown, nLength, nFlag);
        nLength -= 2;
        nDown++;
        nStart++;
    }
}

void C_MAZE::print()
{
	for (int i = 0; i < 101; i++)
	{
		for (int j = 0; j < 301; j++)
		{
			printf("%d", m_arMap[i][j]);
		}
		printf("\n");
	}


    for (int i = 0; i < 10; i++)
    {
        printf("%d ", m_arCount[i]);
    }
}

 

#include <iostream>
#include "maze.h"

int main()
{
    C_MAZE cMage{};

    // [[2, 3, 2, 1], [1, 0, 4, 0], [0, 4, 1, 0]]

    cMage.fill(123, 28, 124, 1);
    cMage.fill(183, 22, 34, 0);
    cMage.fill(188, 81, 116, 1);
    cMage.fill(167, 53, 33, 0);
    cMage.fill(125, 55, 20, 0);
    cMage.print();
}