상세 컨텐츠

본문 제목

[시뮬레이션] 2차원 바람

💯ProblemSolving/개념 정리

by :Eundms 2023. 12. 24. 17:55

본문

[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 함수를 이용하였다 

관련글 더보기

댓글 영역