[JAVA] 프로그래머스 – 배열

이것은 프로그래머의 코딩 테스트 연습인 ‘배열 회전’의 예비 단계입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120844

프로그램 제작자

코드 중심 개발자를 고용하십시오. 배치 기반 위치 매칭. 프로그래머의 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

Programmer.co.kr


문제 설명

매개변수는 숫자라고 하는 정수 배열과 문자열 방향입니다. solve 함수를 완성하여 배열 번호 요소가 방향을 향해 한 단위 회전된 배열을 반환합니다.

※ 아래의 입/출력 예시를 참고해주세요!


제한 사항 및 I/O 예시

  • 3 ≤ 숫자 길이 ≤ 20
  • 방향은 “left” 또는 “right” 입니다.

입출력 예 ▼

입력(숫자, 방향)

(1, 2, 3)  /  "right"

출력(반환값)

(3, 1, 2)

수작업으로 구현된 코드

class Solution {
    public int() solution(int() numbers, String direction) {
        int() answer = new int(numbers.length);
        if(direction.equals("left")) {
            for(int i = 1; i < numbers.length; i++) {
                answer(i-1) = numbers(i);
            }
            answer(answer.length-1) = numbers(0);
        } else {
            for(int i = 0; i < numbers.length-1; i++) {
                answer(i+1) = numbers(i);
            }
            answer(0) = numbers(answer.length-1);
        }
        return answer;
    }
}

코드 설명

  • 최종 결과를 저장하기 위해 숫자 배열의 크기로 응답 배열을 만들었습니다.
  • if 문에서 문자열을 비교해야 하므로 equals() 메서드를 사용했습니다.
  • 방향값을 빠져나갈 때 for 문을 이용하여 Answer(0)에 Numbers(1)의 값을 넣고 Answer(1)에 Numbers(2)를 넣는 것을 반복한다.
  • 정답 배열의 마지막에서 두 번째 공간까지 모든 값을 입력한 후 for문을 빠져나와 답 배열의 마지막 공간에 숫자 배열의 공간 0의 값을 저장한다. 이렇게 “왼쪽”으로 옮겼습니다.
  • 방향 값이 맞으면 for 문을 이용하여 Answer(1)에 Numbers(0) 값을 넣고 Answer(2)에 Numbers(1) 값을 넣는 과정을 반복합니다.
  • 응답 배열의 마지막 공간까지 모든 값을 저장한 후 for 문을 종료합니다. for 문을 빠져나온 후 “오른쪽”으로 가기 위해 숫자 배열의 마지막 공백 값을 answer(0)에 저장합니다.

다른 사람의 코드

import java.util.*;

class Solution {
    public ArrayList solution(int() numbers, String direction) {
        ArrayList<Integer> answer = new ArrayList<Integer>();

        for(int i=0; i<numbers.length; i++){
            answer.add(numbers(i));
        }

        int targetValue = 0;

        if(direction.equals("right")){
            answer.add(0, numbers(numbers.length-1));
            answer.remove(answer.size()-1);

        }else{
            answer.add(numbers(0));
            answer.remove(0);
        }

        return answer;
    }
}

이 사람은 ArrayList를 사용하여 for 문을 사용하지 않고 배열을 재정렬합니다.

코드를 분석해보면

  • 먼저 숫자 배열의 모든 값을 ArrayList인 응답에 복사했습니다.
  • 방향이 올바르면 숫자 배열의 마지막 공백 값이 답의 시작 부분에 추가되고 답의 마지막 공백 값이 제거됩니다.
  • 방향을 벗어날 때 응답 끝에 숫자(0) 값이 추가되고 응답 시작 부분의 값이 제거됩니다.

아직 어떤 문제에 목록을 사용해야 하는지 파악하지 못했습니다. 목록을 사용하면 문제를 풀 때 코드가 더 효율적인지 먼저 확인해야 합니다 🙂