티스토리 뷰

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

문제 설명


정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction 방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

제한사항


  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

입출력 예


numbersdirectionresult
[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

'😈 알고리즘 > 🖥️ 프로그래머스' 카테고리의 다른 글

🖥️ 가장 큰 수 찾기  (0) 2023.01.10
🖥️ 주사위의 개수  (0) 2023.01.09
🖥️ 대문자와 소문자  (0) 2023.01.07
🖥️ 세균 증식 🙋  (0) 2023.01.06
🖥️ 문자열 정렬하기 (1)  (0) 2023.01.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
링크
Total
Today
Yesterday