Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

ㅇ.ㅇ

[신고결과받기] 본문

Algorithm

[신고결과받기]

yun_ 2022. 6. 21. 11:29

 

 

회사 사람들과 간단히 일주일에 프로그래머스 2개 코테를 푸는 스터디를 시작했다. 이렇게라도 안 하면 퇴근하면 아무것도 안 할 것 같아서..
백준은 몇 번 풀어봤는데 프로그래머스는 처음이라 어떤 식으로 굴러가는지도 이해 못 해서 좀 헤맸다.
아니 근데 왜 이렇게 어려워. 자바 공부를 아예 놓고 있다가 된통 당했다. 이렇게 기초적인 것도 모르다니.
그래서 이렇게 백엔드 개발자로 직장을 다니는데 기초적인 것도 몰라서 부끄럽지만 열심히 공부하다 보면 실력이 나아질 거라고 믿고 블로그에 정리하려고 한다.
천천히, 쉽게 해도 좋으니까 꾸준히만 하자-

 

[신고결과받기]

public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        Map<String, HashSet<String>> map = new HashMap<>();
        Map<String, Integer> idxMap = new HashMap<>();

        int num = 0;
        for (String name : id_list) {
            map.put(name, new HashSet<>());
            idxMap.put(name, num);
        }

        for (String rep : report) {
            String[] names = rep.split(" ");
            String goodPeople = names[0];
            String badPeople = names[1];
            map.get(badPeople).add(goodPeople);
        }

        for (String id : id_list) {
            HashSet<String> mail = map.get(id);
            if (mail.size() >= k) {
                for (String name : mail) {
                    answer[idxMap.get(name)]++;
                }

            }
        }
        return answer;
    }

나는 이런식으로 풀었다.

중간까지는 어찌저찌하는데 마지막에 count하는데에서 좀 헤맸다.

다른 사람의 풀이

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        List<String> list = Arrays.stream(report).distinct().collect(Collectors.toList());
        HashMap<String, Integer> count = new HashMap<>();
        for (String s : list) {
            String target = s.split(" ")[1];
            count.put(target, count.getOrDefault(target, 0) + 1);
        }

        return Arrays.stream(id_list).map(_user -> {
            final String user = _user;
            List<String> reportList = list.stream().filter(s -> s.startsWith(user + " ")).collect(Collectors.toList());
            return reportList.stream().filter(s -> count.getOrDefault(s.split(" ")[1], 0) >= k).count();
        }).mapToInt(Long::intValue).toArray();
    }
}
  • getOrDefault(Object Key, Object defaultValue)
    Java8에서 추가된 Collection API 함수.
    찾는 key가 존재한다면 찾는 key의 value를 반환하고 없거나 null이면 default 값을 반환한다.
  • mapToInt, mapToLong, mapToDoublemapXXX
    함수들은 해당 타입의 스트림으로 바꿔준다.
    예를들어 "1","2","3"을 가진 스트림이 있었으면 mapToInt를 적용하면 1,2,3을 가진 스트림으로 변환 해준다.

/

다른 사람 풀이를 볼 수 있어서 봤는데 stream까지는 떠올랐는데 distict라는게 있는지 몰랐다. 찬찬히 살펴봐도 이해가 안가는 부분이 있다. 신기하다. 공부를 해야겠다.

반응형

'Algorithm' 카테고리의 다른 글

[Network]  (0) 2023.04.12
[구명보트] 🚣🏻  (0) 2023.03.31
[가장 큰 수]  (0) 2023.03.16
[양궁대회]  (0) 2023.03.05
[게임 맵]  (0) 2023.03.02