[프로그래머스] Java 코딩테스트 - 마지막 두 원소

yihyun·2025년 7월 21일

코딩테스트

목록 보기
101/105
post-thumbnail

마지막 두 원소

✅ 문제 설명

정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

✅ 제한사항

2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9

🔽 소스코드 1 (copyOf 사용)

💻 풀이

  • 새로운 배열을 선언해 파라미터로 받은 배열의 값을 복사해 넣어준다.

  • 이때 copyOf()를 사용해 복사를 진행하는데, 마지막 값을 하나 추가해주기 위해 크기는 주어진 배열 길이 + 1로 설정해준다.

  • 이후 배열 속 원소 값의 크기를 비교해 적절한 값을 새로운 배열에 마지막 index에 넣어준다.

  • 별도의 반복문 없이 함수로 진행할 수 있는 방법이다.

시간 0.02ms ~ 0.03ms

	public int[] solution1(int[] num_list) {
		
		int len = num_list.length;
		
		int[] arr = Arrays.copyOf(num_list, len + 1);
		
		arr[len] = (num_list[len -1] > num_list[len - 2]) ? 
					num_list[len -1] - num_list[len - 2] : num_list[len -1] * 2;
		
		return arr;
	}

🔽 소스코드 2 (list 와 stream 사용)

💻 풀이

  • 만약 copyOf() 함수가 기억이 안나고 반복문도 사용하고 싶지 않다면 stream을 사용해 풀어줄 수 있다. 😅😅

  • 먼저 List를 만들어주면서 기존 배열의 값을 list에 넣어준다.

  • 값을 넣기 위해 stream을 사용해주는데 boxed()를 이용해 int -> Integer 로 바꿔 사용해주고

  • 배열을 List로 만들기 위해서 collect()를 사용해 변환해준다.

  • 이후 위에 배열방법에서 사용한 방법처럼 배열 속 값을 비교해 적절한 값을 List에 add 해준다.

  • 마지막으로 다시 int[]로 리턴하기 위해서 mapToInt()로 다시 int로 변환해주고 toArray()를 이용해 list를 배열로 변환해 리턴한다.

시간 2.94ms ~ 5.01ms

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

		int len = num_list.length;
		
		list.add((num_list[len -1] > num_list[len - 2]) ? 
				num_list[len -1] - num_list[len - 2] : num_list[len -1] * 2);
		
		return list.stream().mapToInt(Integer::valueOf).toArray();
	}
profile
개발자가 되어보자

0개의 댓글