[알고리즘문제풀기] 배열 자르기

silver's avatar
Dec 01, 2024
[알고리즘문제풀기] 배열 자르기
 

문제

 

내가 작성한 정답

class Solution { public int[] solution(int[] numbers, int num1, int num2) { int[] answer = new int[num2-num1+1]; for(int i=num1; i<=num2; i++){ answer[i-num1] = numbers[i]; } return answer; } }

다른 사람들이 작성한 정답 (stream이용)

import java.util.Arrays; class Solution { public int[] solution(int[] numbers, int num1, int num2) { return Arrays.copyOfRange(numbers, num1, num2 + 1); }
💡
  • Arrays.copyOfRange(numbers, num1, num2 + 1)은 numbers 배열의 num1부터 num2까지의 값을 잘라 새 배열을 반환
import java.util.stream.IntStream; class Solution { public int[] solution(int[] numbers, int num1, int num2) { return IntStream.rangeClosed(num1, num2).map(i -> numbers[i]).toArray(); } }
💡
IntStream.rangeClosed는 num1부터 num2까지의 숫자 범위를 포함한 스트림을 생성 .map(i -> numbers[i])
  • i -> numbers[i]는 스트림에서 가져온 i를 인덱스로 사용해 numbers 배열의 값을 가져온다.
.toArray()
  • 변환된 스트림 데이터를 배열로 변환합니다.
💡

map은 스트림 내의 각 요소를 주어진 변환함수인 람다식에 따라 변환하여 새로운 스트림을 만든다.

  • 목적: 스트림 내 요소를 변환.
  • 사용법: .map(변환함수) 또는 .mapToObj(객체 변환 함수).
  • 반환: 변환된 새 스트림.
 

다른 사람들이 작성한 정답 (변수 2개를 사용한 for문)

class Solution { public int[] solution(int[] numbers, int num1, int num2) { int[] answer = new int[num2 - num1 + 1]; for(int i = num1, j = 0; i < num2+1; i++) { answer[j] = numbers[i]; j++; } return answer; } }
💡
for문 하나에 변수 두 개를 선언할 수 있다!
  • 콤마(,)로 여러 변수를 선언 가능.
  • 서로 다른 역할의 변수도 다룰 수 있음.
 

for문 하나에 변수 두 개를 사용한 예시

public class Main { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5}; int[] result = new int[numbers.length]; for (int i = 0, j = numbers.length - 1; i < numbers.length; i++, j--) { result[i] = numbers[j]; // 배열 뒤집기 } for (int r : result) { System.out.println(r); // 출력: 5, 4, 3, 2, 1 } } }
Share article

silver