본문 바로가기
JAVA/Programmers

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

by tripleup 2023. 5. 31.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 배열 회전시키기

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


해결 과정

 

이 문제 역시 규칙을 찾아보겠다.

 

[3,1,2] right 의 경우 [2,3,1] 이 된다.

answer[0]이 numbers[1] 이 되고

answer[1]이 numbers[2] 이 되고

answer[2]은 numbers[0]이 된다.

 

i를 하나씩 감소시켜 배열 answer에 넣어주면 answer[i] = numbers[i-1] 이 되고 다만 i 가 0이 되면

answer[0] == numbers[numbers.length-1]이 되게 해준다

 

[3,1,2] left 의 경우 [1,2,3] 이 된다. 

answer[0]이 numbers[2] 이 되고

answer[1]이 numbers[0] 이 되고

answer[2]은 numbers[1]이 된다.

 

그렇게 right일때와 그 외(left)로 조건을 나눈 뒤

알맞게 반복문을 지정하여 풀어주면 된다.

 

* 이때 right 문자열을 비교할 때에는 == 를 사용하면 안된다.

direction.equals("right")를 이용해 줘야 한다.

==는 객체가 같은지(객체의 Hashcode)를 비교하지만 객체가 갖고 있는 문자열이 같은지 비교하지 않는다.

 

(참고 링크)

https://codechacha.com/ko/java-string-compare/

 

Java - 문자열(String)을 비교하는 방법 (==, equals, compare)

보통 자바에서 equals()를 사용하여 문자열이 동일한지 확인합니다. ==는 object가 동일한지를 체크하기 때문에 object가 갖고 있는 문자열이 동일하다는 것을 보장하지 않습니다. 또한 compare 메소드

codechacha.com

 

소스 코드

 

class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
           
        if (direction.equals("right")) {
            for (int i = numbers.length-1; i >= 0 ; i--) {
                if (i == 0) {
                    answer[0] = numbers[numbers.length-1];
                    break;
                }
                answer[i] = numbers[i-1];
            }
        } else {
            for (int i = 0; i < numbers.length; i++) {
                if (i == numbers.length-1) {
                    answer[numbers.length-1] = numbers[0];
                    break;
                }
                answer[i] = numbers[i+1];
            }
        }
        
        return answer;
        
    }
}
728x90
반응형

댓글