다음과 같은 지문이 주어졌을 때,
어떤 공연장에는 가로로 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()
}
'🎯 알고리즘 > 개념 & 예제' 카테고리의 다른 글
[Java/자바] Scanner 사용법, next()와 nextLine()의 차이점 (2) | 2023.01.11 |
---|---|
[Java/자바] 표준 입출력, InputStream/OutputStream (0) | 2023.01.11 |
[Java/자바] 스택(Stack)의 개념과 사용 방법 (0) | 2022.07.18 |
댓글