728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/92334
풀이 방법
- 자신이 신고한 목록(Set)과 자신이 신고당한 횟수를 상태로 가지는 클래스 설계
- 자신이 신고한 목록을 ArrayList가 아닌 Set을 쓴 이유는 중복 신고를 컨트롤하기 위함
- 결과를 위해 순서를 보장하는 LinkedHashMap을 사용(Key 값은 userId로 활용)
내 코드(JAVA)
class User {
private final Set<String> reports = new HashSet<>();
private int reportCount;
public boolean addReportUser(String userId) { // 신고 목록 저장
return reports.add(userId);
}
public Set<String> getReports() { // 내 신고 목록 가져오기
return reports;
}
public void increaseReportCount() { // 신고 당한 횟수 증가
reportCount++;
}
public int getReportCount() { // 내 신고 당한 횟수 가져오기
return reportCount;
}
}
public class Sanghoo {
public static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, User> userList = new LinkedHashMap<>(); // 순서를 보장하는 LinkedHashMap 사용
// 1. 유저 생성
for (String id : id_list) {
userList.put(id, new User());
}
// 2. 유저의 신고목록을 저장 및 신고대상 횟수 증가
for (String reportStr : report) {
String[] reportArr = reportStr.split(" ");
String userId = reportArr[0];
String target = reportArr[1];
if(userList.get(userId).addReportUser(target)) { // 중복신고는 불가능
userList.get(target).increaseReportCount();
}
}
int i = 0;
for (String key : userList.keySet()) {
int mailCount = 0;
User user = userList.get(key);
if (!user.getReports().isEmpty()) {
for (String target : user.getReports()) {
if (userList.get(target).getReportCount() >= k) { // 3. 유저가 신고한 대상이 k번 이상 신고되었으면 메일 받음
mailCount++;
}
}
}
answer[i++] = mailCount;
}
return answer;
}
}
다른 사람 코드
- 스트림을 활용하여 간결한 코드들이 눈에 띄었다.
스트림, 람다 등을 좀 더 연습해볼 필요가 있겠다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/JAVA] 2480. 주사위 세개 (0) | 2022.06.30 |
---|---|
[프로그래머스/JAVA] 오픈채팅방 (0) | 2022.06.03 |
[백준/JAVA] 2508. 사탕 박사 고창영 (0) | 2022.04.06 |
[백준/JAVA] 1100. 하얀칸 (0) | 2022.04.04 |
[백준/JAVA] 17952. 과제는 끝나지 않아! (0) | 2022.04.04 |
댓글