프로그래머스 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();
}
'C++' 카테고리의 다른 글
[C++] 6월 9일 코딩 테스트 수업 (0) | 2025.06.09 |
---|---|
[C++] 6월 2일 코딩 테스트 수업 (0) | 2025.06.03 |
[C++] 5월 28일 코딩 테스트 수업 (0) | 2025.05.29 |
[C++] 5월 26일 코딩 테스트 수업 (0) | 2025.05.26 |
[C++] 5월 23일 코딩 테스트 수업 (0) | 2025.05.24 |