알고리즘 & 자료구조/알고리즘 (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;
}