22-04-14-14891-톱니바퀴
본문 바로가기
알고리즘 모음집/New 알고리즘

22-04-14-14891-톱니바퀴

by KyeongMin 2022. 4. 17.
728x90
반응형

01.시계, 반시계 방향 구현

void clockMove(int idx)
{
	int copy = gear[idx][7];
	for (int i = 7; i >= 1; i--)
	{
		gear[idx][i] = gear[idx][i - 1];
	}
	gear[idx][0] = copy;
}

void clockMoveReverse(int idx)
{
	int copy = gear[idx][0];
	for (int i = 0; i < 7; i++)
	{
		gear[idx][i] = gear[idx][i + 1];
	}
	gear[idx][7] = copy;
}

02.회전조건 구현 (같은극, 다른극)

		int number, dir;
		scanf("%d %d", &number, &dir);
		number--;
		int gearDirs[4] = { 0 };
		gearDirs[number] = dir;
		for (int i = number; i >= 1; i--)
		{
			if (gear[i][6] != gear[i - 1][2]) {
				gearDirs[i - 1] = gearDirs[i] * -1;//다른 극인경우 방향 반대
			}
			else {
				gearDirs[i - 1] = 0;//같은 극인 경우 정지
			}
		}
		for (int i = number; i <= 2; i++)
		{
			if (gear[i][2] != gear[i + 1][6]){
				gearDirs[i + 1] = gearDirs[i] * -1;
			

03.0번위치의 합구하기

void sumClock() {
	for (int i = 0, sum=1; i < 4; i++,sum*=2)
	{
		if (gear[i][0] == 1) ret += sum;
	}
}

04.전체소스

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
int gear[4][8];
int ret;
int K;//회전
void init()
{
	K = ret=0;
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 8; j++) {
			scanf("%1d", &gear[i][j]);
		}
	}
}

void clockMove(int idx)
{
	int copy = gear[idx][7];
	for (int i = 7; i >= 1; i--)
	{
		gear[idx][i] = gear[idx][i - 1];
	}
	gear[idx][0] = copy;
}

void clockMoveReverse(int idx)
{
	int copy = gear[idx][0];
	for (int i = 0; i < 7; i++)
	{
		gear[idx][i] = gear[idx][i + 1];
	}
	gear[idx][7] = copy;
}

void rotaionGear()
{
	scanf("%d", &K);
	for (int k = 0; k < K; k++)
	{
		int number, dir;
		scanf("%d %d", &number, &dir);
		number--;
		int gearDirs[4] = { 0 };
		gearDirs[number] = dir;
		for (int i = number; i >= 1; i--)
		{
			if (gear[i][6] != gear[i - 1][2]) {
				gearDirs[i - 1] = gearDirs[i] * -1;//다른 극인경우 방향 반대
			}
			else {
				gearDirs[i - 1] = 0;//같은 극인 경우 정지
			}
		}
		for (int i = number; i <= 2; i++)
		{
			if (gear[i][2] != gear[i + 1][6]){
				gearDirs[i + 1] = gearDirs[i] * -1;
			}
		}
		
		//기록된 방향대로 톱니바퀴 회전
		for (int i = 0; i < 4; i++){
			if (gearDirs[i] == 1) {
				clockMove(i);
			}
			else if (gearDirs[i] == -1){
				clockMoveReverse(i);
			}
		}
	}
}
void sumClock() {
	for (int i = 0, sum=1; i < 4; i++,sum*=2)
	{
		if (gear[i][0] == 1) ret += sum;
	}
}
int main(void)
{
	init();
	rotaionGear();
	sumClock();
	printf("%d\n", ret);
	return 0;
}

https://github.com/3DPIT/study/blob/master/02.studyData/10.Algorithm/2022/%EB%B0%B1%EC%A4%80%EC%BD%94%ED%85%8C/Algorithm/2022/04/0414/22-04-14-14891-%ED%86%B1%EB%8B%88%EB%B0%94%ED%80%B4.md

 

GitHub - 3DPIT/study

Contribute to 3DPIT/study development by creating an account on GitHub.

github.com

 

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

22-04-17-15684-사다리조작  (0) 2022.04.17
22-04-17-15683-감시  (0) 2022.04.17
22-04-12-14889-스타트와링크  (0) 2022.04.12
22-04-11-14888-연산자끼워넣기  (0) 2022.04.12
22-04-11-14503-로봇청소기  (0) 2022.04.11

댓글