-
프로그래머스 - Lv1. 신고 결과 받기PS 2022. 2. 28. 14:30
문제 : 신고 결과 받기
- 문제 내용은 여기.
- 쉽게 말해, "신고자 피신고자" 형태로 신고 메시지가 들어올건데, 이를 적절히 잘 가공하고 카운트해서, '회원별 정지회원신고횟수' 배열을 리턴하라는 것. '정지회원 신고횟수' 배열임을 잊고 '정지회원을 신고한 회원' 배열을 리턴하려고 하는 순간 문제의 의도와는 맞지 않게 번거롭게 된다(처음에 이렇게 풀었다).
풀이
class Solution { public int[] solution(String[] id_list, String[] report, int k) { int[] answers = new int[id_list.length]; // 답장나갈 숫자 배열 - ID순 Set<String> reports = new HashSet<String>(); // 중복을 제거한 신고 내용 for (String r : report) reports.add(r); Map<String, Integer> report_counts = new HashMap<String, Integer>(); // ID별 신고당한 숫자 for (String id : id_list) report_counts.put(id, 0); // 신고당한 횟수를 카운팅 for (String r : reports) { String[] tmp = r.split(" "); report_counts.put(tmp[1], report_counts.get(tmp[1]) + 1); } // 카운팅 된 신고당한 횟수를 k와 비교하여 클 경우, 리턴 배열의 [신고자번째]에 += 1 for (String r : reports) { String[] tmp = r.split(" "); if (report_counts.get(tmp[1]) >= k) answers[Arrays.asList(id_list).indexOf(tmp[0])] += 1; } return answers; } }
- 코드 길이가 짧고 주석을 잘 남겨놔서 설명은 생략.
후기
1 ) 처음에는
for
문 안에서String[] tmp
를 사용하지 않고split()
이 필요할 때마다 호출했었다.split()
으로 똑같은 배열을 중복 생성하는게 많이 비효율적일까 싶어서(당연히 비효율적이겠지만 어느 정도 차이가 날지 궁금했다), 나중에String[] tmp
에split()
결과를 담아 사용해 보았는데... 뜻밖에도 속도는 거의 차이가 없었다.
2 ) 쓸 때마다 까먹어서 구글에 검색하고 사용하는 메서드가 있다. 바로Arrays.asList()
다(지금도 잠깐 까먹었음). Java에서 배열은indexOf()
도sort()
도 지원하지 않기 때문에, List 같은 기능을 사용하고 싶을때 유용하다.'PS' 카테고리의 다른 글
프로그래머스 - Lv1. 비밀지도 (0) 2022.03.04 프로그래머스 - Lv1. 2016년 (0) 2022.03.02 프로그래머스 - Lv1. 예산 (0) 2022.03.01 프로그래머스 - Lv1. 3진수 뒤집기 (0) 2022.02.27 프로그래머스 - Lv1. 약수의 개수와 덧셈 (0) 2022.02.26 프로그래머스 - Lv1. 실패율 (0) 2022.02.25