톱니바퀴
회전 판단하는 함수, 회전시키는 함수 따로 구현함.
틀린 이유
- 재귀함수호출 안함 : rotate_check 함수에서 재귀호출을 통해 왼쪽의 왼쪽 톱니바퀴, 오른쪽의 오른쪽 톱니바퀴에 대해 처리해줘야하는데 재귀함수 호출을 하지 않고 회전시키는 함수를 호출해버리니 현재의 왼쪽, 오른쪽 톱니바퀴만 해당되기 때문에 틀린다!!! 
- (구현은 했지만 좀 더 발전시키기)flag변수를 만들어서 왼쪽의 경우 왼쪽 방향에 있는 톱니바퀴들만 회전, 오른쪽의 경우 오른쪽 방향에 있는 톱니바퀴들만 회전하도록 한다. =>초기의 경우는 일단 무조건 실행되야하므로 초기 flag=0으로 해서 flag가 0인 경우는 둘다 실행되도록 한다. 
- 왼쪽 방향에 있는 톱니바퀴들만 회전, 오른쪽의 경우 오른쪽 방향에 있는 톱니바퀴들만 회전 구현 안함. 위의 flag값을 이용해서 왼쪽인 경우, 오른쪽인 경우 따로 재귀호출 처리해준다! 
- (구현은 했지만 좀 더 발전시키기)범위 체크 => 범위체크 잘 하긴 했는데 범위체크는 재귀함수 호출할 때 처리해주면 된다. 재귀함수 호출 전에 prev[2] cur[6] 조건 체크할 때 범위 체크도 함께 해주면(if문을 하나로 합친다!) 코드가 간결해진다! 재귀함수 호출할 때 범위체크를 하기 때문에 재귀함수 시작하자마자 범위체크는 없애도 된다. 
- 반시계방향 회전시키는 증감문 틀림(또 틀린 부분) => 우변 먼저 생각해라!! 우변이 실제로 들어가는 값이다!!!!!! 
반시계방향 틀린 이유 아래코드는 손코딩 디버깅해보면 이것은 시계방향이다!! 좌변을 기준으로 생각해버려서 틀렸다!! 코드는 우변의 값이 좌변에 대입되는 개념인데 아래 코드는 글을 읽듯이 왼쪽부터 해석해버려서 틀렸다!! g[7] = g[6] g[6] = g[5] g[5] = g[4] ... g[1] = g[0]
//2.반시계방향 회전.
		if(dir == -1) {
			int tmp = gears[index][0];
			for(int i=7;i>0;i--) {//a[n] = a[n+1]
				gears[index][i] = gears[index][i-1];
			}
			gears[index][7] = tmp;
		}
- rotate_check 함수 : 회전 여부 확인하고 톱니회전함수 rotate 호출, 실행. 
static void rotate_check(int index,int dir,int flag) {
		if(index <0 || index>3) return;
		//초기에 flag = 0. 일단 무조건 실행.
		if(flag == -1 || flag == 0) {
			if(index-1 <0) return;
			if(gears[index-1][2] != gears[index][6]) {
				rotate(index-1,-dir);//왼쪽 톱니바퀴에서 왔다.왼쪽만 생각한다.
			}
		}
		if(flag == 1 || flag == 0) {
			if(index+1 >3) return;
			if(gears[index][2] != gears[index+1][6]) {
				rotate(index+1,-dir);
			}
		}
		//톱니 회전.
		rotate(index,-dir);
	}2. rotate 함수 : 톱니바퀴들 회전. 틀린 이유=>시계, 반시계 방향에서 회전시킬 때 증감문부분 서로 반대됨!
	static void rotate(int index,int dir) {
		//1.시계방향 회전.
		if(dir == 1) {
			int tmp = gears[index][7];
			for(int i=1;i<7;i++) {
				gears[index][i] = gears[index][i-1];
			}
			gears[index][0] = tmp;
		}
		//2.반시계방향 회전.
		if(dir == -1) {
			int tmp = gears[index][0];
			for(int i=7;i>0;i--) {//a[n] = a[n+1]
				gears[index][i] = gears[index][i-1];
			}
			gears[index][7] = tmp;
		}
	}디버깅용 톱니바퀴 출력
//		System.out.println("===== 톱니바퀴 정보 출력 =====");
//		for(int i=0;i<4;i++) {
//			for(int j=0;j<8;j++) {
//				System.out.print(gears[i][j]+" ");
//			}
//			System.out.println();
//		}Last updated
Was this helpful?