요즘 BOJ라고 제목을 달고 올리는 글은 백준 온라인 저지의 약자이다.

아무 생각없이 다른 사람들도 그런 식으로 이름을 달아서 올리길래 나도 그렇게 했는데, 갑자기 BOJ는 뱅크 오브 재팬이던가? 하는 생각이 들어서 남겨둔다.


RGB 거리 문제는 거리에 사는 사람들의 집의 숫자를 주어주고, 이전 집과 중복되는 색을 칠하니 않는 조건으로 가장 저렴하게 거리의 집들을 칠하는 방법을 물어보는 문제이다.

거리에 있는 집의 숫자 * 3 만큼의 버퍼를 만들어주고 거기에 값을 저장하면서 가장 최적의 값이 무엇인지 알아가는 형식으로 구현하였다.



#include <iostream>
#include <string.h>
#include <algorithm>

using namespace std;


int getCurCoord(int nCnt, int nCurWidth, int nCurHeight)
{
	return ((nCnt * nCurHeight) + nCurWidth);
}

int main()
{
	int nCnt = 0;

	scanf("%d", &nCnt);

	int *pArrBuf = (int *)malloc(sizeof(int) * nCnt * 3);
	int nMinSum = 0;
	
	if (pArrBuf != nullptr)
	{
		memset(pArrBuf, 0, sizeof(int) * nCnt * 3);

		//! for 0
		scanf("%d%d%d", &pArrBuf[getCurCoord(3, 0, 0)], &pArrBuf[getCurCoord(3, 1, 0)], &pArrBuf[getCurCoord(3, 2, 0)]);

		//! starting from 1
		for (int i = 1; i < nCnt; ++i)
		{
			scanf("%d%d%d", &pArrBuf[getCurCoord(3, 0, i)], &pArrBuf[getCurCoord(3, 1, i)], &pArrBuf[getCurCoord(3, 2, i)]);

			for (int j = 0; j < 3; ++j)
			{
				switch (j)
				{
				case 0:
					//! min sum with 1, 2
					pArrBuf[getCurCoord(3, j, i)] += min(pArrBuf[getCurCoord(3, 1, i - 1)], pArrBuf[getCurCoord(3, 2, i - 1)]);
					break;
				case 1:
					//! min sum with 0, 2
					pArrBuf[getCurCoord(3, j, i)] += min(pArrBuf[getCurCoord(3, 0, i - 1)], pArrBuf[getCurCoord(3, 2, i - 1)]);
					break;
				default:
					//! min sum with 0, 1
					pArrBuf[getCurCoord(3, j, i)] += min(pArrBuf[getCurCoord(3, 0, i - 1)], pArrBuf[getCurCoord(3, 1, i - 1)]);
					break;
				}
			}
		}

		//! get min value of last lane
		nMinSum = min(pArrBuf[getCurCoord(3, 0, nCnt - 1)], pArrBuf[getCurCoord(3, 1, nCnt - 1)]);
		nMinSum = min(nMinSum, pArrBuf[getCurCoord(3, 2, nCnt - 1)]);

		free(pArrBuf);
	}

	printf("%d\n", nMinSum);

    return 0;
}



처음에 봤을 때, 무슨 계산을 잘못해서였는지 문제가 틀렸다고 생각했는데, 다시 해보니 잘 되어서 그대로 구현해서 문제를 풀었다.

(내 눈이 문제인가;;;)


'Programming > C,C++' 카테고리의 다른 글

[LeetCode] 22. Generate Parentheses  (0) 2018.01.25
[BOJ] 10844. 쉬운 계단 수  (0) 2018.01.21
[BOJ] 1149. RGB거리  (0) 2018.01.20
[BOJ] 1932. 숫자삼각형  (0) 2018.01.19
[BOJ] 2193. 이친수  (0) 2018.01.19
[BOJ] 2579. 계단 오르기  (0) 2018.01.15

+ Recent posts