우당탕탕 개발일지
[프로그래머스] 신고 결과 받기(Java, Level.1) 본문
문제
입출력 예
풀이
나는 이 문제를 푸는데 오랜 시간이 걸렸다.... ㅠㅠ
결론적으로 말하면 1번째 방법은 정답은 맞췄으나 5개의 테스트 케이스가 시간초과가 계속 발생하여 실패...
2번째 방법은 다른 여러 블로그를 찾아 공부하여 풀었다...!
1번째 방법
배열 4개, HashMap 1개를 사용하여 문제를 풀었다.
[ 배열 ]
1. 신고한 명단 배열
2. 신고당한 횟수 배열
3. 메일 전송 개수 저장한 배열 (반환값)
4. 정지 당한 명단 배열
[ HashMap ]
1. 사용자의 Index 값을 저장하는 HashMap
해당 방식의 문제점은 많은 배열로 인해 반복문을 계속 사용하여야 한다는 점이었다....!
배열이기 때문에 처음부터 끝까지 계속 확인해야 하기에 시간이 오래걸린다... 또한 같은 정보를 무려 3개로 나누었기에 반복문을 더 많이 사용하여야 한다.
따라서 2번째 방법을 살펴봐야 한다.
2번째 방법
배열 1개, HashMap 2개를 사용한다.
[ 배열 ]
1. 메일 전송 개수 저장한 배열 (반환값)
[ HashMap]
1. 사용자의 Index 값을 저장하는 HashMap
2. 신고 정보을 가지고 있는 HashMap
- Key : 신고당한 사람
- Value : 신고한 사람 집합
2번째 방법은 신고 정보을 배열 3개가 아닌 HashMap 1개에 저장하였다.
HashMap의 Value을 HashSet 형태로 지정하여 신고당한 횟수도 손쉽게 구할 수 있게 되었다.
또한, HashMap을 사용하여 신고당한 사람의 이름만 Key 값으로 가지고 있다.
그 뿐만이 아니라 배열을 사용하였기에 중복 신고를 걸러내기 위해 반복문을 한번더 사용하게 되었다.
그러면 이제 본격적인 코드 설명을 시작하겠다.
먼저 아래와 같은 순서로 구현하였다.
1. 사용자별 index 저장
2. 신고 정보 저장
3. 메일 전송 대상 선별
1. 사용자별 index 저장
Key : 사용자 이름
Value : index 값
2. 신고 정보 저장
주어진 report배열에서 신고한 사람과 신고 당한 사람을 각각 변수에 저장
reportMap에 신고당한 사람(Key), HashSet 초기화(Value) 진행
>> 처음으로 b값을 저장할 경우, HashSet이 초기화 되어 있지 않기 때문에 초기화를 진행한다.
그 후, Key 값이 b인 Value, HasgSet에 a를 추가
HashSet은 중복을 허용하지 않기 때문에 그냥 a를 추가한다.
동일한 값이 있더라도 1개만 저장되기 때문에 상관없다....!!
(1번째 방법으로 하였을때는 중복을 처리하기는 것이 까다로웠다...)
3. 메일 전송 대상 선별
2번에서 저장한 reportMap의 Key 값 기준으로 반복문을 돌린다.
해당 Key값의 Value가 가지고 있는 원소 개수로 중단 계정을 선별한다.
중단 계정일 경우에만 해당 Value에 저장되어 있는 모든 사용자를 기준으로 반복문을 돌린다.
해당 사용자의 Index 값을 사용하여 mailCountArr의 알맞는 위치에 +1를 한다.
이렇게 과정을 거친 mailCountArr을 반환한다.
코드
프로그래머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 데이터 분석(Java, Level.1) (0) | 2024.07.09 |
---|---|
[프로그래머스] 공원 산책 (Java, Level.1) (1) | 2024.07.08 |
[프로그래머스] 가장 많이 받은 선물(Java, Level.1) (0) | 2024.07.05 |
[프로그래머스] 할인행사(Java, Level.2) (0) | 2024.06.25 |
[프로그래머스] 호텔 대실(Java, Level.2) (0) | 2024.05.07 |