우당탕탕 개발_𝒍𝒐𝒈

<프로그래머스>Lv0_ 머쓱이보다 키 큰 사람, 중앙값 구하기, 짝수는 싫어요 본문

𝐬𝐭𝐮𝐝𝐲/𝐚𝐥𝐠𝐨𝐫𝐢𝐭𝐡𝐦

<프로그래머스>Lv0_ 머쓱이보다 키 큰 사람, 중앙값 구하기, 짝수는 싫어요

hojeong01 2024. 5. 29. 17:14

<문제1>  머쓱이보다 키 큰 사람

머쓱이는 학교에서 키 순으로 줄을 설 때 몊 번째로 서야 하는지 궁금해졌습니다. 

머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때,

머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

 

/제한 사항/

1 <= array의 길이 <= 100

0 <= height <= 200

0 <= array의 원소 <= 200

 

<문제 풀이>

  • 반 아이들의 키가 담긴 배열(array)를 스트림으로 변환 후 정렬 (.sorted())을 한다. 
  • .filter()를 사용하여 머쓱이보다 키가 큰 원소만 남긴다. 
  • 남은 원소의 개수를 .count()하여 합하여 return한다.
 public static int solution1(int[] array, int height){
       return (int) Arrays.stream(array).sorted().filter(n -> n > height).count();

 

- 다름 사람의 문제 풀이를 살펴보다 어짜피 filter를 사용해 머쓱이보다 큰값을 골라내니까 sorted()를 굳이 할 필요가 없었을 수도 있겠다는 생각도 들었다.

 

<문제2>  중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미 합니다. 

예를 들어 1,2,7,10,11의 중앙값은 7입니다. 

중앙값을 return하도록 solution 함수를 완성해보세요.

 

/제한사항/

array의 길이는 홀수 입니다. 

0 < array의 길이 < 100

-1,000 < array의 원소 < 1,000

 

<문제풀이>

 

어떻게 중앙값을 찾을 수 있을까 고민하다 배열의 길이(length)와 배열의 인덱스( [ ] )개념을 적용하여 중앙값(center)을 구하면 되겠다는 생각에 다음과 같이 접근하여 문제를 해결했다. 

  • 배열의 길이를 2로 나눈 후 내림값을 center 변수에 담는다. 
  • Array.sort()를 사용하여 배열을 오름차순으로 정렬한다. 
  • array의 인덱스에 center값을 넣어 중앙값을 출력한다.
 public static int solution1(int[] array){
        int center = (int) Math.floor(array.length / 2);
        Arrays.sort(array);
        return array[center];
   }

 

<문제3> 짝수는 싫어요

 

정수 n이 매개변수로 주어질 때, n이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution함수를 완성해주세요.

 

/제한사항/

1 <= n <= 100

 

<문제풀이>

 

'짝수의 합'에서 알게된 IntSream.rangClosed()를 사용하여 풀이해보았다. 

https://hojeong016.tistory.com/12

 

<프로그래머스>Lv_0 짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을. return 하도록 solution 함수를 작성해주세요. 정수 n이하의 짝수 값을 구하여 공간의 제약이 없는  ArrayList에 담기짝수값을 구하기 위해 n % 2 ==0

hojeong016.tistory.com

  • 정수 0~n 까지 요소를 스트림에 담은 후 filter()를 사용하여 홀수값만 남게 한다. 
  • .sorted()를 통해 남은 원자들을 오름차순으로 정렬한다. 
  • .toArray()를 통해 배열 타입으로 반환한다. 
   public static int[] solution1(int n){
       return IntStream.rangeClosed(0, n)
               .filter(a -> a % 2 > 0)
               .sorted()
               .toArray();
   }

 

<느낀점>

오늘은 이전 문제에서 적용했던 방식을 복기 할 수 있는 문제들 위주로 나왔다. 

그래서 복습하는 마음으로 즐겁게 풀었다.