Coding Test/Java Coding Test

[프로그래머스 / 자바] - 배열 회전시키기

nam_ji 2024. 5. 30. 17:26

배열 회전시키기

문제

  • 정수 배열 numbers와 문자열 direction이 매개변수로 주어집니다.
  • 배열 numbers의 원소를 direction 방향으로 한 칸씩 회전시킨 배열을 출력하는 문제입니다.


테스트 (인텔리제이)

  • 우선 List타입의 answer를 생성합니다.
  • 이후 for문을 이용하여 numbers의 값을 answer에 담아줍니다.
  • direction을 구분하기 위해 if문으로 direction이 right일 때와 아닐 때로 나눴습니다. (문제의 방향은 right와 left만 존재하기 때문에 if문 뒤에 else if문이 아니어도 됩니다.)
  • right일 때 가장 마지막 원소가 첫 번째 원소가 된다고 생각할 수 있기 때문에 answer의 마지막 원소를 삭제하고 첫 번째 자리에 추가해주면 됩니다.
  • 마찬가지로 left는 첫 번쨰 원소가 마지막 원소가 된다고 생각할 수 있기 때문에 answer의 첫 번째 원소를 삭제하고 마지막 자리에 추가해주면 됩니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class 배열_회전시키기 {

  public static void main(String[] args) {
    /*
    정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다.
    배열 number의 원소를 direction 방향으로 한 칸씩 회전시킨 배열을 출력하는 문제입니다.
    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]
     */

    int[] numbers = {4, 455, 6, 4, -1, 45, 6};
    String direction = "left";
    List<Integer> answer = new ArrayList<>();

    for (int num : numbers) {
      answer.add(num);
    }

    if (direction.equals("right")) {
      answer.remove(numbers.length - 1);
      answer.add(0, numbers[numbers.length - 1]);
    } else {
      answer.remove(0);
      answer.add(numbers[0]);
    }

    System.out.println(answer);
  }
}

프로그래머스 코드

import java.util.*;

class Solution {
    public List<Integer> solution(int[] numbers, String direction) {
        List<Integer> answer = new ArrayList<>();
        
        for (int num : numbers) {
            answer.add(num);
        }
        
        if (direction.equals("right")) {
            answer.remove(numbers.length - 1);
            answer.add(0, numbers[numbers.length - 1]);
        } else {
            answer.remove(0);
            answer.add(numbers[0]);
        }
        return answer;
    }
}