IT/Programmers
[Programmers/코딩테스트 연습] 배열회전 Java
안선생 Dr.Ahn
2022. 12. 9. 00:08
728x90
반응형
배열 회전시키기 (Java)
class Solution {
public int[] solution(int[] numbers, String direction) {
int len = numbers.length;
int[] answer = new int[len];
if(direction.equals("right")) {
answer[0] = numbers[len-1];
for(int i = 1; i < len ; i++) {
answer[i] = numbers[i-1];
}
} else {
answer[len-1] = numbers[0];
for(int i = 0; i < len -1; i++) {
answer[i] = numbers[i+1];
}
}
return answer;
}
}
뭔 개똥같은 실패가 자꾸 떠서 매우 분노가 일었지만 초기화를 미친듯이 눌러대며 인간승리했다.
그래서 조금 조잡한 코드 발생..
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에서 쓸 수 있는 add() 메소드를 이용한 코드다.
answer.add(0, numbers[len-1]) 이 부분을 보고, '그럼 answer[0]의 숫자가 바뀌는 것 아닌가?' 라고 생각했는데!
add() 메소드는 덧붙이는 것인가 보다. 그래서 기존의 answer[0] 이 answer[1]이 되고,
remove() 메소드를 이용해 이동으로 인해 실제로 바뀐 단 하나의 숫자 위치만 삭제해버리는 것이다!
ㅎㅎ 재밌었다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public int[] solution(int[] numbers, String direction) {
List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
if (direction.equals("right")) {
list.add(0, list.get(list.size() - 1));
list.remove(list.size() - 1);
} else {
list.add(list.size(), list.get(0));
list.remove(0);
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
위와 비슷하지만 list와 stream을 이용한 코드.
그 외에는 전부 비슷비슷하다.
728x90
반응형