본문 바로가기
Blog/TIL

[240905] 코딩 테스트 풀이

by 코젼 2024. 9. 5.
728x90
반응형

🔶 stream


목차

    / 오늘의 TIL /


    처음에는 먼저 시간 내에 문제를 빨리 푸는 게 목적이었고, stream 을 사용해서 리팩토링을 해보았다.

    import java.util.*;
    import java.util.stream.*;
    
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
    
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < name.length; i++) {
            map.put(name[i], yearning[i]);
        }
    
        List<Integer> answer = new ArrayList<>();
        for (int i = 0; i < photo.length; i++) {
            int score = 0;
            for (int j = 0; j < photo[i].length; j++) {
                if (map.containsKey(photo[i][j])) {
                    score += map.get(photo[i][j]);
                }
            }
            answer.add(score);
        }
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }

     

    리팩토링

    ide 환경 없이 코딩 테스트를 풀 수 있도록 준비하고 있는데... 꽤나 쉽지 않다 😅

    - iter 를 통해 새로운 데이터를 만들 때 IntStream 을 이용해서 범위 구현하기

    - boxed 로 객체 변환하고, collect 를 이용해서 Map 객체 만들기(Collectors.toMap())

    - 2차원 배열일 때는 mapToInt 를 활용해서 stream 두 번 엮기

    import java.util.*;
    import java.util.stream.*;
    
    class Solution {
        public int[] solution(String[] name, int[] yearning, String[][] photo) {
    
            Map<String, Integer> map = IntStream.range(0, name.length)
                .boxed()
                .collect(Collectors.toMap(i -> name[i], i -> yearning[i]));
    
            return Arrays.stream(photo)
                .mapToInt(p -> Arrays.stream(p)
                         .filter(map::containsKey)
                         .mapToInt(map::get)
                         .sum())
                .toArray();
        }
    }
    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240907] 이진법  (0) 2024.09.07
    [240906] 우선 순위 큐 (PriorityQueue)  (0) 2024.09.06
    [240626] JS 문법  (0) 2024.06.26
    [240621] 동시성 테스트, BT  (0) 2024.06.21
    [240620] ArgumentMatchers  (0) 2024.06.20

    댓글