프로그래머스 “배열 회전시키기” 문제 해결과정입니다.
배열 회전시키기
문제 설명
정수가 담긴 배열 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] |
문제 해결과정
본인은 프로그래머스에서 코드를 작성하기에 어려움을 느껴 먼저 이클립스에서 코드를 실행하고 확인 후 프로그래머스 웹 텍스트 에디터로 옮기는 작업을 했다. 이클립스에서 클래스 파일을 생성하고 main에서 실행하여 확인하였다.
이클립스 코드
package Practice;
import java.util.Arrays;
public class practice {
public static void main(String[] args) {
int[] answer = {};
int[] numbers = {1,2,3}; // INDEX 0,1,2
String direction = "left";
if(direction.equals("right")){
int sizeR = numbers.length; // 3
// System.out.println("sizeR : " + sizeR);
// System.out.println("numbers[2] : " + numbers[2]); // 3
// System.out.println("numbers[sizeR] : " + numbers[sizeR - 1]); // 3
int a = numbers[sizeR - 1];
System.out.println("a : " + a);
for(int i = sizeR-1; i > 0; i--){
// System.out.println("numbers[i] : " + numbers[i]); // 3
// System.out.println("numbers[] : " + numbers[sizeR - 1]); // 3
numbers[i] = numbers[i-1];
}
// System.out.println("a : " + a);
numbers[0] = a;
// System.out.println("numbers[0] : " + numbers[0]); // 3
// System.out.println("numbers[1] : " + numbers[1]); // 1
// System.out.println("numbers[2] : " + numbers[2]); // 2
// System.out.println("numbers" + numbers);
answer = numbers;
// System.out.println("answer : " + answer); [I@68fb2c38 ?
System.out.println("answer : " + Arrays.toString(answer));
// return answer;
}else{ //left
int sizeL = numbers.length; // 3
int b = numbers[0];
System.out.println("b : " + b);
for(int i = 1; i < sizeL; i++){
numbers[i-1] = numbers[i];
}
numbers[sizeL-1] = b;
answer = numbers;
System.out.println("answer : " + Arrays.toString(answer));
// return answer;
}
}
}
먼저 예시로 주어진 변수들을 선언한다. numbers와 direction을 설정해주었다. 이후에 direction을 ‘right’와 ‘left’로 구분짓고 각 상황에 따른 코드를 작성했다. direction이 right일 경우 배열 {1,2,3}이 오른쪽으로 움직여 {3,1,2} 가 되어야 한다. 그래서 먼저 변수 ‘a’를 선언해 ‘3’을 저장해 두었다. 이후 numbers의 총 길이를 ‘sizeR’에 저장했다. 배열의 사이즈나 인덱스 위치가 헷갈려 print문으로 하나하나 확인하며 진행하였다. 오른쪽으로 이동하는 경우는 3이 저장되고 1과 2가 이동된 뒤에 맨 처음 인덱스에 3을 저장해주면 된다. 이 과정에서 2(sizeR – 1)에서 i가 0보다 클 때까지(2번) 이동되도록 for문을 작성해 옮겨 주었다. left의 경우도 똑같이 진행해주었다. 이후에 잘 들어갔는지 print문으로 확인하였다.
그런데 이클립스에서 배열을 출력하니 넣어둔 배열이 리스트 형식으로 출력 되는 것이 아니라 ‘[I@68fb2c38’의 문자열 출력되었다. 이유를 찾아보니 이는 배열의 형식을 출력하는 것으로 I는 1차원 int를 의미하고 ‘@’ 뒤에 나오는 16진수는 배열의 주소인데 실제 주소가 아닌 내부 주소를 의미한다고 한다. 어쨌든 이를 해결하는 방법에는 ‘Arrays.toString’을 사용하여 곧바로 해결되었다.
프로그래머스 코드
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = {};
if(direction.equals("right")){
int sizeR = numbers.length;
int a = numbers[sizeR - 1];
System.out.println("a : " + a);
for(int i = sizeR-1; i > 0; i--){
numbers[i] = numbers[i-1];
}
numbers[0] = a;
answer = numbers;
return answer;
}else{ //left
int sizeL = numbers.length; // 3
int b = numbers[0];
System.out.println("b : " + b);
for(int i = 1; i < sizeL; i++){
numbers[i-1] = numbers[i];
}
numbers[sizeL-1] = b;
answer = numbers;
return answer;
}
}
}
프로그래머스 코드에서는 쓸데없는 print 문과 선언했던 변수들을 지워 실행했다. 그런데 프로그래머스에서는 ‘Arrays.toString’ 인식이 되지 않아 지우고 실행했더니 잘 마무리 되었다.
참고 – https://gksdudrb922.tistory.com/133
최신글
![[프로그래머스] 잘라서 배열로 저장하기 - 자바](https://develog.co.kr/wp-content/uploads/2025/01/프로그래머스-잘라서-배열로-저장하기-자바-150x150.png)
![[프로그래머스] 붕대 감기 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-붕대-감기-자바-150x150.png)
![[프로그래머스] 달리기 경주 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-달리기-경주-자바-150x150.png)