[プログラマー]通学路
問題の概要
配列のサイズ(m,n)と水たまりの位置を入力します.
いつも(1,1)家(m-1,n-1)で学校にいるときは,右と下からしか学校に移動できない通学路の数を求める.(mod 1,000,000,007)
すくい取る
mは横で、nは縦です.ピットの位置も[横座標,縦座標]で与えられる.
これを裏返しに考えた.例題もあいにく[2,2]で,当てられなかった.
新学的。
memset
long long tab[100][100]={0,};0の場合のみ、同じ初期化を行うことができます.
#include<memory.h>
...
bool map[100][100];
memset(map,true,sizeof(map));
コード#コード#
#include <string>
#include <vector>
#include<iostream>
#include<memory.h>
using namespace std;
//오른쪽과 아래로만 이동 가능
bool map[100][100];
long long tab[100][100]={0,};
long long MOD= 1000000007;
int solution(int m, int n, vector<vector<int>> puddles) {
int answer = 0;
memset(map,true,sizeof(map));
for(int ctr = 0;ctr<puddles.size();ctr++){
int i = puddles[ctr][1]-1,j = puddles[ctr][0]-1;
map[i][j] = false;
}
if(map[1][0]) tab[1][0] = 1;
if(map[0][1]) tab[0][1] =1;
//세로를 1로 채운다.
for(int i = 2;i<n;i++){
if(map[i][0])
tab[i][0] = tab[i-1][0];
}
//가로를 1로 채운다
for(int j = 2;j<m;j++){
if(map[0][j])
tab[0][j] = tab[0][j-1];
}
//테이블의 나머지 네모를 채운다.
for(int i = 1;i<n;i++){
for(int j = 1;j<m;j++){
if(map[i][j])
tab[i][j] = (tab[i-1][j]+tab[i][j-1])%MOD;
}
}
answer = tab[n-1][m-1];
return answer;
}
軽量バージョン2
#include <string>
#include <vector>
#include<iostream>
#include<memory.h>
using namespace std;
//오른쪽과 아래로만 이동 가능
bool map[100][100];
long long tab[100][100]={0,};
long long MOD= 1000000007;
int m, n;
bool inbox(int i, int j){
return i>=0&&i<n&&j>=0&&j<m;
}
int solution(int mm, int nn, vector<vector<int>> puddles) {
int answer = 0;
m = mm; n=nn;
memset(map,true,sizeof(map));
for(int ctr = 0;ctr<puddles.size();ctr++){
int i = puddles[ctr][1]-1,j = puddles[ctr][0]-1;
map[i][j] = false;
}
tab[0][0] = 1;
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
if(i == 0&&j ==0) continue;
if(map[i][j]){
tab[i][j] = ((inbox(i-1,j)?tab[i-1][j]:0)+(inbox(i,j-1)?tab[i][j-1]:0))%MOD;
}
}
}
answer = tab[n-1][m-1];
return answer;
}
Reference
この問題について([プログラマー]通学路), 我々は、より多くの情報をここで見つけました https://velog.io/@coding3392/프로그래머스-등굣길テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol