본문 바로가기

알고리즘/[프로그래머스]Lv.0

[프로그래머스]Lv .0 배열 회전시키기

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있을 수 있습니다. )

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120844?language=java 

 

프로그래머스

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

programmers.co.kr

 

1.문제설명

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

 

2. 문제해결 접근

  • 인수로 받은 문자열 direction을 판독한다
  • 조건문으로 해당 문자열에 따라 배열의 위치를 재배치 한다
  • 한칸씩 밀때(right)는 임시변수에 끝 값을 보관하고 / 당길때 (left)때는 임시변수에 첫 값을 보관한다.
  • 반복문으로 배열의 요소를 재배치한다.

 

3.답안 : [언어 : java ]

class Solution {
    public int[] solution(int[] numbers, String direction) {
			//direction 가 left일때
            if(direction.equals("left")){
                int firstValue = numbers[0];
                for (int i = 0; i < numbers.length -1; i++) {
                //값에 다음값을 재정의하며 값을 한칸씩 당긴다
                    numbers[i] = numbers[ i + 1 ];
                    
                }
                numbers[numbers.length-1] = firstValue;
            }
            // direction가 right일 때 
            else{
                int lastValue = numbers[numbers.length - 1 ];
                for (int i = numbers.length-1 ; i > 0 ; i--) {
                    //값을 이전값을 대입하며 값을 한칸씩 민다
                    numbers[i] = numbers[ i - 1 ];
                }
                numbers[0] = lastValue;
            }
        return numbers;
    }
}

 

4. C++ 답안

rotate 함수 사용

#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;
}

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers, string direction) {
    vector<int> answer;
    if(direction == "right"){
		// number의 마지막 요소를 추가한다(back())
        answer.push_back(numbers.back());
        // 이후 마지막 요소를 제외한 나머지 요소를 하나씩 추가한다.
        for(int i = 0; i<numbers.size()-1; i++){
            answer.push_back(numbers[i]);
        }
    }
    else{
    	// for문 초기값 = 1 2번째 요소부터 하나씩 추가한다
        for(int i = 1; i < numbers.size(); i++){
            answer.push_back(numbers[i]);
        }
        // number의 첫번째 요소를 마지막에 추가한다.
        answer.push_back(numbers.front());
    }

    return answer;
}

 

 

5. C++ 문법 설명과 표현법

C++의 경우는 algorithm에 포함되어있는 rotate함수를 이용해 보다 쉽게 풀이할 수 있다.

- 다만 rotate함수는 데이터가 많아질 경우 매우 효율이 떨어지는 방법이므로 사용을 지양한다.

 

 

https://notepad96.tistory.com/59

 

C++ 값 회전하기 rotate

1. rotate rotate 함수는 algorithm 라이브러리의 포함되어 있다. rotate 함수를 사용함으로써 값을들 마치 회전시키는 듯 지정된 횟수만큼오른쪽으로 회전시키거나, 왼쪽으로 회전할 수 있다. 다만 회전

notepad96.tistory.com