본문 바로가기
Algorithm/Programers

배열 회전시키기

by 꼬부기가우는소리 2023. 6. 8.
728x90

 

- 관련 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120844

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정수가 담긴 배열의 원소를 입력 받은 방향으로 한 칸씩 회전시킨 결과를 확인하는 문제이다.

단순 한 칸 이동이므로, 이동시킬 원소를 앞 또는 뒤에 삽입 후 이동된 원소를 제거해주었다.

 

1) 왼쪽으로 이동인 경우, 첫번째 위치 원소의 값을 배열 가장 마지막에 삽입 후 첫번째 위치 원소 제거

2) 오른쪽으로 이동인 경우, 마지막 위치 원소의 값을 배열 가장 앞에 삽입 후 마지막 위치 원소 제거

 

#include <string>
#include <vector>
using namespace std;

vector<int> solution(vector<int> numbers, string direction) {
    if (direction == "left")
    {
        numbers.insert(numbers.end(), numbers.at(0));
        numbers.erase(numbers.begin());
    }
    else
    {
        int last = numbers.size() - 1;
        numbers.insert(numbers.begin(), numbers.at(last));
        numbers.erase(numbers.end() - 1);
    }
    return numbers;
}

 

rotate 함수를 통해 푸는 방법도 가능하다.

1) 왼쪽으로 이동인 경우, 가장 앞에서 두번째 원소를 기준으로 설정

2) 오른쪽으로 이동인 경우, 가장 마지막에서 두번째 원소를 기준으로 설정

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> numbers, string direction) {
    if (direction == "left")
        rotate(numbers.begin(), numbers.begin() + 1, numbers.end());
    else
        rotate(numbers.begin(), numbers.end() - 1, numbers.end());
    return numbers;
}
728x90

'Algorithm > Programers' 카테고리의 다른 글

컨트롤 제트  (0) 2023.06.15
N개의 최소공배수  (0) 2023.06.12
가까운 수  (0) 2023.06.08
정수 부분  (0) 2023.06.07
피자 나눠 먹기 (3)  (0) 2023.06.06

댓글