본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+ Java언어 내용도 포함되어있을 수 있습니다. )
https://school.programmers.co.kr/learn/courses/30/lessons/120844?language=java
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
'알고리즘 > [프로그래머스]Lv.0' 카테고리의 다른 글
[프로그래머스]Lv .0 최댓값 만들기 (2) (0) | 2022.11.17 |
---|---|
[프로그래머스]Lv 0. 인덱스 바꾸기 (0) | 2022.11.07 |
[프로그래머스]Lv 0. 문자열 정렬하기 (1) (0) | 2022.11.07 |
[프로그래머스]Lv 0. 중복된 문자 제거 (0) | 2022.11.07 |
[프로그래머스]Lv0. 숨어있는 숫자의 덧셈 (1) (0) | 2022.11.03 |