[1] 시계 방향 이동
시계 방향으로 이동한다는 것을 값을 끌어온다고 생각하였다
int startValue = box[startX][startY];
int x = startX, y = startY;
int[][] way = {{1,0},{0,1},{-1,0},{0,-1}};
for(int w = 0; w < 4; w++){
while(true){
int nx = x + way[w][0];
int ny = y + way[w][1];
if(nx < startX || nx > endX || ny < startY || ny > endY)break;
box[x][y] = box[nx][ny];
x = nx;
y = ny;
}
}
box[startX][startY+1] = startValue;
- 좌측 맨 상단값을 startValue에 저장해두었다
- 사각형의 범위를 넘어가는 경우 방향을 전환하도록 하였다
[2] 주변 평균
// 각 위치에서의 평균을 구해서 값을 대치한다
int[][] answer = copy(box);
for(int i = startX; i <= endX; i++){
for(int j = startY; j <= endY; j++){
int sum = box[i][j];
int cnt = 1;
for(int w2 = 0; w2 < 4; w2++){
int nearX = i + way[w2][0];
int nearY = j + way[w2][1];
if(nearX < 0 || nearX >= ROW_SIZE || nearY < 0 || nearY >= COL_SIZE)continue;
sum += box[nearX][nearY];
cnt +=1;
}
answer[i][j] = sum / cnt ;
}
}
box = copy(answer);
- 이런 문제 풀 때 항상 원본값에 영향을 줘도 되는지 확인해야 한다
원본값에 영향을 줄 경우 다음 연산이 영향을 받기 때문에 copy 함수를 이용하였다
[정렬] 삽입정렬, 병합정렬 (0) | 2024.01.16 |
---|---|
여러 자료구조 - HashMap, HashSet, PriorityQueue (0) | 2023.10.08 |
댓글 영역