프로그래머스 코딩테스트 연습 입문단계 '배열 회전시키기' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120844
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓ 문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
※ 아래 입출력 예시를 참고하세요!
⚠️ 제한사항 및 입출력 예시
- 3 ≤ numbers의 길이 ≤ 20
- direction은 "left" 와 "right" 둘 중 하나입니다.
입출력 예시 ▼
입력 (numbers, direction)
[1, 2, 3] / "right"
출력 (return값)
[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;
}
}
🗣️ 코드 설명
- 최종 결과를 저장할 answer배열을 numbers배열의 크기로 생성했습니다.
- if문안에서 문자열을 비교해야하므로 equals() 메서드를 이용했습니다.
- 만약 direction값이 left라면, for문을 이용해 answer[0]에 numbers[1]의 값을 넣고 answer[1]에 numbers[2]를 넣는 것을 반복합니다.
- answer배열의 마지막에서 두 번째 방까지 값을 다 넣은 후 for문을 나와서 answer배열의 마지막 방에 numbers배열의 0방 값을 저장합니다. 이렇게 "left"로 이동하게 했습니다.
- 만약 direction값이 right라면, for문을 이용해 answer[1]에 numbers[0]의 값을 넣고 answer[2]에 numbers[1]를 넣는 것을 반복합니다.
- answer배열의 마지막 방까지 값을 다 저장한 후 for문을 나옵니다. for문을 나온 뒤에 answer[0]에 numbers배열의 마지막방 값을 저장하여 "right"로 이동하게 됩니다.
🔥다른 사람의 코드
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인 answer에 numbers배열의 값을 다 복사했다.
- direction이 right일때는 answer 가장 앞에 numbers배열의 마지막 방의 값을 add하고, answer의 마지막 방의 값을 remove한다.
- direction이 left일때는 answer 가장 뒤에 number[0] 값을 add하고, answer의 가장 앞에 있는 값을 remove했다.
아직 List를 어떤 문제에 써야하는지 감이 잡히지 않았다. 문제들을 풀 때 List를 사용하면 더 효율적인 코드가 되지는 않나 확인을 먼저 해봐야겠다 :)
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - 합성수 찾기 (0) | 2023.03.17 |
---|---|
[JAVA] 프로그래머스 - 가까운 수 (0) | 2023.03.11 |
[JAVA] 학교 수행평가 코딩테스트 - 문자열을 입력 받아 거꾸로 출력하기 (0) | 2023.03.06 |
[JAVA] 학교 수행평가 코딩테스트 - 정수 5개를 배열에 저장하고 평균 출력하기 (0) | 2023.03.04 |
[JAVA] 프로그래머스 - 진료순서 정하기 (0) | 2023.03.04 |