2023. 5. 4. 15:57, 알고리즘/BOJ
처음 내가 생각하게 된 방향으로 정답 코드를 찾아보고 그 코드를 보았을때 내가 생각한 첫 번째 코드 구현 방향으로 수정을 해보았더니 확실하게 더 이해하기 힘들어졌다.
#include <bits/stdc++.h>
using namespace std;
long long board[105][105];
long long d[105][105];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> board[i][j];
d[0][0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
//int jump = board[i][j];
if (i != n - 1 && i + board[i][j] < n)
d[i + board[i][j]][j] = d[i + board[i][j]][j] + d[i][j];
if (j != n - 1 && j + board[i][j] < n)
d[i][j + board[i][j]] = d[i][j + board[i][j]]+d[i][j];
}
}
cout << d[n - 1][n - 1];
}
위와 같이 int jump=board[i][j]; 형태로 값을 써놓지 않고 그냥 그대로 바로 board[i][j];값이 들어가는 곳마다 전부 board[i][j] 값을 사용하니까 아주 코드가 복잡해져보이게 되었다. 머리속에서 이걸 시험 시간 내에 풀면서 자꾸 헷갈리게 된 배경에도 이런식으로 표현했을때 이해하기 힘들어지는 부분이 충분히 영향을 미쳤을 수 있다고 생각된다.
근데 내가 참고한 정답 코드에서는 지속적으로 사용하는 board[i][j] 값을 int jump=board[i][j]; 형태로 jump라는 변수를 선언하고 board[i][j]값을 복사해서 넣어주고 그 이후부터 지속적으로 jump라는 표현으로 사용해주니까 가독성도 훨씬 좋아지고 코드를 읽어가면서 논리를 전개시킬때 길을 잃지 않고 지속적으로 파악하기에 좋은 상황을 보게 되었다.
#include <bits/stdc++.h>
using namespace std;
long long board[105][105];
long long d[105][105];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> board[i][j];
d[0][0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int jump = board[i][j];
if (i != n - 1 && i + board[i][j] < n)
d[i + jump][j] = d[i + jump][j] + d[i][j];
if (j != n - 1 && j + board[i][j] < n)
d[i][j + jump] = d[i][j + jump]+d[i][j];
}
}
cout << d[n - 1][n - 1];
}
이런식으로 int jump=board[i][j]라는 형태로 복잡해보이면서 지속적으로 사용해야 할 값 자체를 보기 편한 이름으로 새로 선언한 변수에 복사해서 넣어줘서 사용하면 코드의 가독성도 증가시키고 더욱 보기 편해지고 틀릴 일이 적어질것이다.
앞으로는 이런 방향으로 이러한 형태의 문제를 풀때 참고해서 풀이방법을 설정해보도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 9465// 이 문제의 풀이법에 대해서 잘 이해를 해야겠다. (0) | 2023.05.06 |
---|---|
시간복잡도의 표현에 관하여. (0) | 2023.05.05 |
c++ boj 15988번 문제를 통해 보는, "1,000,000,009로 나눈 나머지를 출력한다." 등의 형태를 요구하는 문제에 대해서. (0) | 2023.05.03 |
stack과 같은 기능을 활용해야 하는데, 그 와중에 개별 원소에 접근해야 할때. 그럴땐 deque를 사용하자. (0) | 2023.05.03 |
dp 문제에서 pre[] 배열을 선언해서 뒤로 추적해 나갈때 deque의 활용 (0) | 2023.05.02 |
Comments, Trackbacks