알고리즘 & 자료구조/알고리즘 (Algo)

[C/C++ 8.4] 알고리즘 - Shift Left / Shift Right

물꼮이 2022. 4. 21. 08:08

 

Shift Left / Shift Right

// Level 23.5

//1번
int arr[5] = { 3,5,1,9,7 };						// Shift Left, Shift Right 정리 해놓음 !!
void belt(char A) {
	int tmp;
	// Shift Right
	if (A == 'R') {
    		//swap
		tmp = arr[4];	// 마지막 문자 미리 저장
		for (int i = 3; i >=0; i--) {
			arr[i + 1] = arr[i];
		}
		arr[0] = tmp;
	}
	// Shift Left
	else if (A == 'L') {
    		//swap
		tmp = arr[0];	// 첫번째 문자 미리 저장
		for (int i = 0; i < 4; i++) {
			arr[i] = arr[i+1];
		}
		arr[4] = tmp;
	}
}
int main() {

	char RL[4];
	for (int i = 0; i < 4; i++)
		cin >> RL[i];
	for (int i = 0; i < 4; i++)
		belt(RL[i]);
	for (int i = 0; i < 5; i++)
		cout << arr[i] << " ";
	return 0;
}

 

 

입력받은 수 Shift Right한 값으로 2차배열 치환  

예로들어13 7 6을 입력 받았다고 한다면,

이차배열의 값을 1->3,3->7, 7->6, 6->1 로 변경 

//4번
int main() {
	int arr[3][4] = {
		3,5,4,1,
		1,1,2,3,
		6,7,1,2
	};
	int input[4];
	//입력
	for (int i = 0; i < 4; i++)
		cin >> input[i];
	//바꾸기		// 입력한 숫자 차례대로 shift right 하며, 2차배열 속 숫자 바꾸기 !!!
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			for (int t = 0; t < 3; t++) {
				if (arr[i][j] == input[3]) {		// 단, 마지막 일 땐 처음으로 순환
					arr[i][j] = input[0];
					break;
				}
				if (arr[i][j] == input[t]) {		//컨베이어 벨트
					arr[i][j] = input[t + 1];
					break;							// break 안하면 한번 바뀐 값이 계속해서 바뀔 수 있음 !!!******* 주의 !!!!
													// for문으로 서로 다른 각 2 개 이상 비교할 때 주의 !!! ***
				}
			}
		}
	}
	// 출력
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}