본문 바로가기
🎯 알고리즘/개념 & 예제

2차원 배열에서 범위체크하기

by 서버요정 호토론 2025. 8. 24.

다음과 같은 지문이 주어졌을 때,

어떤 공연장에는 가로로 R개, 세로로 C개의 좌석이 R×C격자형으로 배치되어 있다.

 

공연장의 크기는 RxC로 표현할 수 있다
4x4 공연장의 크기를 벗어나지 않도록 범위를 체크해보자.

 

방법1.

R4x4인 크기의 공연장을 벗어나지 않기 위해서는

4x4공연장의 크기를 벗어나지 않는 경우는 R>0, R<N, C>0, C<N 인 경우이다.

이는 다음과 같이 표현할 수 있다.

for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) { //경연장 크기

        if (r + i >= 0 && r + i < N && c + j >= 0 && c + j < N) { //범위체크
            func()
        }
    }
}

 

방법2.

공연장의 주변을 둘러쌓아 색칠된 부분이지 않을때만 코드가 실행하도록 할 수도 있다.

 

 

세로 행을 먼저 칠해보자

양 끝의 세로행은 C=0, C=N+1 인 경우이고, R값이 1씩 증가함을 알 수 있다

 

 

반복문을 이용해 색칠해 보자

for(int i=0; i<R+2; ++i) // 행 변화
    map[i][C+1] = map[i][0] = -1;//세로열만 -1로 변경

 

 

같은 방법으로 가로행도 칠해보자

for(int i=0; i<C+2; ++i) // 열 변화
    map[R+1][i] = map[0][i] = -1;//가로행 -1로 변경

 

 

최종 결과

arr = new int[N+2][N+2]; 

for(int i=0; i<N+2; ++i) // 행 변화
    arr[i][N+1] = arr[i][0] = -1;//세로열만 -1로 변경
for(int i=0; i<N+2; ++i) // 열 변화
    arr[N+1][i] = arr[0][i] = -1;//가로행 -1로 변경



if(arr[r][c] => 0) { //색칠되지 않았을 때만 실행
    func()
}

댓글