[회고록] 조그만 실수 (feat 프로그래머스)
Updated:
코딩중 조그마한 실수
오늘 프로그래머스 2020 카카오신입 공채 문제를 풀다가 시간이 훌쩍 가버렸다. 물론 답을 구현하는데 상당히 많은 양의 코드작성이 필요하긴 했지만, 다 작성을 했는데도 결과가 이상하게 나왔다.
위의 링크 문제인데 수십번의 코드 리뷰끝에 드디어 발견하였는데 정말 헛웃음이 나왔다. 그것은 바로 이부분
bool canMove(int row1, int column1, int row2, int column2, vector<vector<int> > board){
int n = board.size();
if(row1 < 1 || row1 > n || column1 < 1 || column1 > n || board[row1][column1] == WALL ||
row2 < 1 || row2 > n || column2 < 1 || column2 > n || board[row2][column2] == WALL){
return false;
}
return true;
}
board[row1][column1] 부분에서 -1 을 해주지 않아서 엉뚱한 결과가 나온것이다.
그렇기 때문에 그부분만 추가해주면 된다. 사실 조그마한 실수같지만 그 결과는 전혀 다르기에 큰 실수라고 할 수도 있나?
bool canMove(int row1, int column1, int row2, int column2, vector<vector<int> > board){
int n = board.size();
// 움직일수 있는지 확인, 참고: board 인덱스에 -1 을 해준이유는 시작 행과 열이 1부터 시작하기 때문이다
if(row1 < 1 || row1 > n || column1 < 1 || column1 > n || board[row1-1][column1-1] == WALL ||
row2 < 1 || row2 > n || column2 < 1 || column2 > n || board[row2-1][column2-1] == WALL){
return false;
}
return true;
}
모든 행과 열은 0부터가 아니라 1부터 시작하기 때문에 board 벡터의 인덱스는 항상 -1 이 된 상태여야 한다. 그렇지 않으면 인덱스가 초과할것이다.
예전보다야 훨씬 나아졌지만 아직도 배열이나 벡터를 활용하는 문제가 나오면 가끔이지만 이런 실수를 한다. 거의 모든 알고리즘은 벡터나 배열의 인덱스를 잘 이해하고 활용하면
효과적으로 문제를 풀어 나갈수 있다. 기억하자. 시작 행과 열이 0이 아니라 1 인 경우라면 이렇게 인덱스를 신경써줘야 한다.
Leave a comment