코딩테스트 연습 - 배열 회전시키기
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction 방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요. 제한사항 입출력 예 입출력 예 설명 입출력 예 #1 numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.


문제 설명
정수가 담긴 배열 numbers
와 문자열 direction
가 매개변수로 주어집니다. 배열 numbers
의 원소를 direction
방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤
numbers
의 길이 ≤ 20
direction
은 "left" 와 "right" 둘 중 하나입니다.
입출력 예
numbers | direction | result |
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
입출력 예 설명
입출력 예 #1
numbers
가 [1, 2, 3]이고direction
이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.
입출력 예 #2
numbers
가 [4, 455, 6, 4, -1, 45, 6]이고direction
이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.
제출 코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> numbers, string direction) {
vector<int> answer;
int length = numbers.size();
if(direction == "right")
{
answer.push_back(numbers[length - 1]);
for(int i = 0; i < length - 1; i++)
{
answer.push_back(numbers[i]);
}
}
else
{
for(int i = 0; i < length - 1; i++)
{
answer.push_back(numbers[i + 1]);
}
answer.push_back(numbers[0]);
}
return answer;
}
vector를 이용한 풀이
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> solution(vector<int> numbers, string direction) {
vector<int> answer = numbers;
if(direction == "left")
rotate(answer.begin(),answer.begin()+1,answer.end());
else
rotate(answer.begin(),answer.end()-1,answer.end());
return answer;
}
rotate 함수를 이용한 풀이
🙋 더 알아보기
rotate 함수 사용하기
#include <vector>
#include <iostream>
#include <algorithm> // 알고리즘 헤더를 추가해줘야 한다
using namespace std;
int main()
{
vector<int> test = {1,2,3,4,5};
// 오른쪽으로 이동
rotate(test.begin(), test.begin() + 1, test.end());
for (auto t : test)
{
cout << t << ' ';
}
cout << endl;
// 왼쪽으로 이동 (원위치)
rotate(test.begin(), test.end() - 1, test.end());
for (auto t : test)
{
cout << t << ' ';
}
cout << endl;
rotate(test.begin(), test.begin() + 2, test.end());
for (auto t : test)
{
cout << t << ' ';
}
cout << endl;
rotate(test.begin(), test.end() - 2, test.end());
for (auto t : test)
{
cout << t << ' ';
}
cout << endl;
}
// 결과
// 2 3 4 5 1
// 1 2 3 4 5
// 3 4 5 1 2
// 1 2 3 4 5
rotate(vector.begin(), vector.begin() + n, vector.end());
→ 오른쪽으로 이동
rotate(vector.begin(), vector.end() - n, vector.end());
→ 왼쪽으로 이동
⚠️
rotate(test.begin(), test.end() + 1, test.end());
궁금해서 test.end() + 1로 적어보았더니 오류가 뜨면서 실행이 되지 않았다.Uploaded by N2T