Hello Ocean! ๐ŸŒผ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋“ฑ๊ตฃ๊ธธ ๋ณธ๋ฌธ

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋“ฑ๊ตฃ๊ธธ

bba_dda 2020. 12. 28. 18:10
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

๊ณ„์†๋˜๋Š” ํญ์šฐ๋กœ ์ผ๋ถ€ ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ง€์—ญ์„ ํ†ตํ•ด ํ•™๊ต๋ฅผ ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์€ m x n ํฌ๊ธฐ์˜ ๊ฒฉ์ž๋ชจ์–‘์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ m = 4, n = 3 ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์™ผ์ชฝ ์œ„, ์ฆ‰ ์ง‘์ด ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋Š” (1, 1)๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ฆ‰ ํ•™๊ต๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋Š” (m, n)์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ฒฉ์ž์˜ ํฌ๊ธฐ m, n๊ณผ ๋ฌผ์ด ์ž ๊ธด ์ง€์—ญ์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด puddles์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ๊ณผ ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์›€์ง์—ฌ ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ 1,000,000,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๊ฒฉ์ž์˜ ํฌ๊ธฐ m, n์€ 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • m๊ณผ n์ด ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฌผ์— ์ž ๊ธด ์ง€์—ญ์€ 0๊ฐœ ์ด์ƒ 10๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ง‘๊ณผ ํ•™๊ต๊ฐ€ ๋ฌผ์— ์ž ๊ธด ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

m n puddles return
4 3 [[2, 2]] 4

 

์ฝ”๋“œ

1. ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ ํ•ด๋‹น ์ขŒํ‘œ๊นŒ์ง€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ cache ๋ฐฐ์—ด์— ์ €์žฅํ•˜์—ฌ ์ด์šฉ (DP)

 

2. ์ขŒํ‘œ๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ

  • puddles์˜ ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•  ๋•Œ -1ํ•ด์•ผํ•จ. 

3. cache์— ์ฑ„์šธ ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐ’์„ 1,000,000,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ ์„ค์ •ํ•ด์•ผํ•จ

  • ์ด ๋ถ€๋ถ„์„ ๋นผ๊ณ  ์ •๋‹ต์„ ์ œ์ถœํ–ˆ์„ ๋•Œ, ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ์ง€๋งŒ, ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์‹คํŒจํ–ˆ๋‹ค. 
  • %1000000007์„ ์ถ”๊ฐ€ํ•˜์ž ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๋„ ๋ชจ๋‘ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

4. cache ๋ฐฐ์—ด์—์„œ, ๊ฐ€์žฅ์ž๋ฆฌ(์™ผ์ชฝ, ์œ„์ชฝ)๋Š” ๋ฌด์กฐ๊ฑด 1์ด ์•„๋‹ˆ๋‹ค.

  • ์ฒ˜์Œ์— ๊ฐ€์žฅ์ž๋ฆฌ์— ๋ฌด์กฐ๊ฑด 1์„ ๋„ฃ์–ด๋†“๊ณ  ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ, ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ค‘๊ฐ„์— ์›…๋ฉ์ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ทธ ๋’ค์˜ ์นธ๋“ค์€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

#include <string>
#include <vector>
using namespace std;

int cache[101][101];
int solution(int M, int N, vector<vector<int>> puddles) {
	int answer = 0;
	int m, n;
	fill(cache[0], cache[0] + 10201, 1);
	for (int i = 0;i < puddles.size();i++) {
		m = puddles[i][0];
		n = puddles[i][1];
		cache[m - 1][n - 1] = 0; // ์ขŒํ‘œ๊ฐ€ 1, 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ
	}
	for (int i = 0;i < M;i++) {
		for (int j = 0;j < N;j++) {
			if (cache[i][j] == 0 || i == 0 && j == 0)
				continue;
			if (i == 0) {
				cache[i][j] = cache[i][j - 1];
				continue;
			}
			if (j == 0) {
				cache[i][j] = cache[i - 1][j];
				continue;
			}

			cache[i][j] = (cache[i - 1][j] + cache[i][j - 1]) % 1000000007; // ๋ฌธ์ œ์˜ ์กฐ๊ฑด
		}
	}
	answer = cache[M - 1][N - 1];
	return answer;
}

๋Š๋‚€์ 

  • ๋ฌธ์ œ๋ฅผ ๊ผผ๊ผผํžˆ ์ž˜ ์ฝ์ž
  • ๋ฐฐ์—ด ๊ฐ’ ์ฑ„์šฐ๋Š” fill() ๋“ฑ์˜ ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌํ•˜๊ธฐ 
  • vector ๋‚ด์˜ ์›์†Œ์— ์ ‘๊ทผํ•  ๋•Œ iter์„ ์“ฐ๋Š” ๋ฐฉ๋ฒ•, ์žฅ์  ์ฐพ์•„๋ณด๊ธฐ
๋ฐ˜์‘ํ˜•