<TIL> 16. 코테 230218, stream을 사용한 형변환

YUJIN LEE·2023년 2월 18일
0

코딩테스트

목록 보기
4/7
class Solution {
        public int[] solution(int[] arr, int divisor) {
            int count = 0;
            for(int i = 0; i < arr.length; i++){
                if(arr[i]%divisor == 0){
                     count++;
                }
            } // 배열의 길이를 여기서 선언!!!!!
            if(count == 0){
                int answer[] = {-1};
                return answer;
            }   // 0일때 배열에 -1을 선언!!
            int[] answer = new int[count];

            for(int i = 0, j = 0; i < arr.length; i++){
                if(arr[i] % divisor == 0){
                    answer[j] = arr[i];
                    j++;
                }
            }   // 배열에 값 집어넣기
            Arrays.sort(answer); 오름차순 정렬!!


            return answer;
        }
    }

나누어 떨어지는 숫자 배열

배열 초기화를 한번만 해야한다는걸 망각하고 계속 해서 고생했다..
배열의 길이를 자꾸 초기화를 해서 앞에 0으로 표시되었는데..
앞으로는 코드 한줄한줄을 신경써서 봐야지 ㅠㅠ

Integer.parseInt(answer, 3);
=> 3진법을 사용해 10진수로 표현하는 함수

int w = Math.max(sizes[i][0], sizes[i][1]);
int h = Math.min(sizes[i][0], sizes[i][1]);

Math.max()는 두 인자 값 중 큰 값을 리턴!
Math.min()은 두 인자 값 중 작은 값을 리턴!
그래서, https://school.programmers.co.kr/learn/courses/30/lessons/86491
최소 직사각형 구하는 문제에서, 가로 세로 값을 비교해서 긴 쪽을 가로라고 정하여
비교 후 가로중에서의 큰값을 구하고, 세로중에서의 큰 값을 구해서
둘이 곱해주면 되는 간단한 문제였다.
수학적 함수를 잘 활용하자!
(수학 함수를 잘 몰라서, 활용을 하는걸 차근차근 익혀나가자)

import java.util.*;

    public class Solution {
        public int[] solution(int []arr) {
            int[] answer = {};
            ArrayList<Integer> list = new ArrayList<>();
            int value = -1;
            for(int i = 0; i < arr.length ; i++){
                if(arr[i] != value){
                    list.add(arr[i]);
                    value = arr[i];
                }
            }
            return list.stream().mapToInt(i -> i).toArray();


        }
    }

같은 숫자는 싫어
이 문제는 ArrayList를 하나 더 생성한 후
arr 배열의 값과 value의 값이 같지 않다면,
새롭게 생성한 배열에 arr배열의 값을 추가하면서 계속 같지 않은 것만 비교해서 넣어
결국 이전값과 비교해 중복되지 않으면 배열에 저장, 같지 않으면 저장x

int[] arr로 배열을 리턴해줘야하기 때문에
stream을 이용해 변환을 한다 -> .list.stream().mapToInt(i -> i).toArray();
이 방법은, 리스트를 스트림으로 변환 후, map을 이용해 intStream을 가져오고, 그 후 toArray()를 통해 배열로 만든다!!

0개의 댓글