삐까냥의 파도타기

Q10164. 격자상의 격로 본문

코딩/백준 알고리즘

Q10164. 격자상의 격로

금손형아 2019. 2. 24. 22:30

경로를 저장하며 나아가는 로직


k[i][j] = k[i-1][j] + k[i][j-1] 입니다.


동그라미가 없는 경우 (K=0 일때)와 동그라미가 있는 경우를 나누어서 구현했습니다.

(이해하기 쉽도록, 처음 생각한 대로 구현했어요)


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Q10164 {


static int[][] dp;

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

int N = Integer.parseInt(st.nextToken());

int M = Integer.parseInt(st.nextToken());

int K = Integer.parseInt(st.nextToken());

dp = new int[N+1][M+1];

if (K == 0) {

for (int i = 1; i <= M; i++) {

dp[1][i] = 1;

}

for (int i = 1; i <= N; i++) {

dp[i][1] = 1;

}

for (int i = 2; i <= N; i++) {

for (int j = 2; j <= M; j++) {

dp[i][j] = dp[i-1][j] + dp[i][j-1];

}

}

} else {

int y = K / M;

int x = K % M;

if (x > 0) {

y += 1;

} else if (x == 0) {

x = M;

}

for (int i = 1; i <= x; i++) {

dp[1][i] = 1;

}

for (int i = 1; i <= y; i++) {

dp[i][1] = 1;

}

for (int i = 2; i <= y; i++) {

for (int j = 2; j <= x; j++) {

dp[i][j] = dp[i-1][j] + dp[i][j-1];

}

}

for (int j = x+1; j <= M; j++) {

dp[y][j] = dp[y][j-1];

}

for (int i = y+1; i <= N; i++) {

for (int j = x; j <= M; j++) {

if (y > 1) {

}

dp[i][j] = dp[i-1][j] + dp[i][j-1];

}

}

}

System.out.println(dp[N][M]);

}


'코딩 > 백준 알고리즘' 카테고리의 다른 글

Q2302. 극장 좌석  (0) 2019.02.25
Q5557. 1학년  (0) 2019.02.25
Q9507. Generations of Tribbles  (0) 2019.02.24
Q9252. LCS 2  (0) 2019.02.23
Q9251. LCS  (0) 2019.02.23