[프로그래머스] Java 코딩테스트 - 배열 뒤집기 (ps. Collections.reverse 과 stream을 버무린...)

yihyun·2025년 3월 26일

코딩테스트

목록 보기
25/105

배열 뒤집기

✅ 문제 설명

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

✅ 제한사항

my_string은 소문자와 공백으로 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000

🔽 소스코드 1 (replaceAll() 사용)

💻 풀이

  • replaceAll() 을 사용해 모음을 없애준다.

시간 0.01ms ~ 0.02ms

	public int[] solution(int[] num_list) {
		
		int[] num = new int[num_list.length];

		for(int i = 0; i < num_list.length; i++) {
			num[i] = num_list[num_list.length  - i - 1];
		}
	
		return num;
	}

🔽 소스코드 1-1 (반복문 사용 2)

💻 풀이

  • 소스코드 1과 동일하게 반복문을 사용해주지만 for문 조건을 i와 j 2개로 설정해주었다.
  • , 로 구분하면 1개 이상의 조건을 설정할 수 있다.
  • i 는 파라미터의 길이로 설정해주고, j 는 0부터 시작해서 파라미터의 가장 뒤부터 값을 꺼내 num 배열에 담아준다.

시간 0.20ms ~ 0.29ms

	public int[] solution1_1(int[] num_list) {
		
		int[] num = new int[num_list.length];
		
		for(int i = num_list.length -1, j = 0; i >= 0; i--, j++) {
			num[j] = num_list[i];
		}
		
		return num;
	}

🔽 소스코드 2 (Collections.reverse)

💻 풀이

  • Collection.reverse 는 List 에서 사용 가능하기 때문에 List<Integer> 로 list를 만들어준다.
  • 그러나 int는 기본형이므로 list로 변환할 수 없다.
  • 그렇기 때문에 Integer로 변환하기 위해 boxed() 를 사용해 오토박싱 을 해준다.
    ※ 오토박싱 : 기본형 데이터를 자동으로 래퍼 클래스 객체로 변환하는 것
  • 이후 collect(Collectors.toList()) 를 통해 스트림을 list로 변환해준다.
List<Integer> list = Arrays.stream(num_list).boxed().collect(Collectors.toList());
  • 이후 Collections.reverse() 를 사용해 리스트를 뒤집어준다.
Collections.reverse(list);
  • return을 위해서는 다시 int 배열로 변환해줘야 한다.
  • 먼저 list를 stream 으로 변환해준다. stream()
  • 이후 mapToint(Integer::intValue) 를 사용해 Integer 객체해서 int로 언박싱을 해준다.
    :: : 매서드 레퍼런스 문법으로 만약 사용하지 않을 경우 map(x -> xlntValue()) 로 사용해 줄 수 있다.
  • 이후 변환된 int 값을 int[] 배열로 반환하기 위해 toArray()를 사용해준다.
return list.stream().mapToInt(Integer::intValue).toArray();
  • 이 풀이는 나의 공부를 위해서 풀어보았다! 그 결과 시간은 굉장히 오래 걸리는 것으로 마무리 ^^
    지금은 stream이 어색하기는 하지만 사용할 경우 코드의 간결함 + 가독성이 높아지고, 원본 데이터의 유지(불변성), 병렬처리 등의 장점이 있으니 꾸준히 공부해보려고 한다!

시간 2.97ms ~ 4.42ms

전체코드

	public int[] solution2(int[] num_list) {
		
		List<Integer> list = Arrays.stream(num_list).boxed().collect(Collectors.toList());

		Collections.reverse(list);
	
		return list.stream().mapToInt(Integer::intValue).toArray();
	}
profile
개발자가 되어보자

0개의 댓글