25일차 - 알고리즘 코드카타

2024. 8. 19. 09:51·Java & Spring/코딩테스트
목차
  1. - 회고
  2. - 진행

- 회고

74. 신고 결과 받기 : https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

- 풀이 과정

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        List<String> idLi = Arrays.asList(id_list);
        Map<String, Integer> idMap = new HashMap<>();
        Set<String> reSet = new HashSet<>();
        List<String> banId = new ArrayList<>();
        int[] answer = new int[id_list.length];

        for (String s : id_list) {
            idMap.put(s, 0);
        }

        for (String r : report) {
            reSet.add(r);
        }

        for (String s : reSet) {
            String[] repot = s.split(" ");
            idMap.put(repot[1], idMap.get(repot[1]) + 1);
        }

        for (String key : idMap.keySet()) {
            if (idMap.get(key) >= k) {
                banId.add(key);
            }
        }

        for (String r : reSet) {
            String[] rArr = r.split(" ");
            if(banId.contains(rArr[1])){
                answer[idLi.indexOf(rArr[0])]++;
            }
        }
        return answer;
    }
}
  1. 신고 횟수 저장을 위한 idMap생성
  2. 중복신고 제외를 위한 reportSet(reSet)생성
  3. 신고당한 횟수 확인을 위해 reSet을 순회하며 idMap에 신고횟수 누적
  4. idMap의 value값이 2이상 되는 key를 banId에 추가
  5. reSet을 순회하며 신고당한 사람이 banId에 포함되면 메일발송 +1진행

※ 마지막 메일발송을 위한 for문을 진행할 때 처음에는 시간초과가 발생했다.

 for(int i = 0; i < id_list.length; i++){
            for (String b : banId) {
                String send = id_list[i] + " " + b;
                if(reLi.contains(send)){
                    answer[i]++;
                }
            }
        }

다른 코드들 대비 해당 코드만 이중 포문으로 시간복잡도가 O(n^2)이어서 해당 부분 코드를 수정했다.

- 진행

일자 완료 번호
24.07.16 ~ 24.07.31 1~63
24.08.01 64
24.08.02 65
24.08.05 66
24.08.06 67
24.08.07 68
24.08.08 69
24.08.09 70
24.08.12 71
24.08.13 72
24.08.14 73
24.08.19 74
   

'Java & Spring > 코딩테스트' 카테고리의 다른 글

26일차 - SQL 코드카타  (1) 2024.08.20
26일차 - 알고리즘 코드카타  (1) 2024.08.20
23일차 - 알고리즘 코드카타  (0) 2024.08.14
22일차 - 알고리즘 코드카타  (0) 2024.08.13
21일차 - 알고리즘 코드카타  (0) 2024.08.12
  1. - 회고
  2. - 진행
'Java & Spring/코딩테스트' 카테고리의 다른 글
  • 26일차 - SQL 코드카타
  • 26일차 - 알고리즘 코드카타
  • 23일차 - 알고리즘 코드카타
  • 22일차 - 알고리즘 코드카타
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
DJ Hello World백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 유클리드 호제법
    java super
    자료구조
    java 멤버
    java 세수의합
    java two-pointer
    java 제어자
    프로그래머스 java 기초 트레이닝
    java
    Java this
    데이터 타입
    Java 생성자
    프로그래머스 java 기초트레이닝
    개발로드맵
    java 메서드
    데이터 크기
    java기초
    java 에라토스테네스의 체
    java arrays.copyofrnage()
    java enhance switch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
25일차 - 알고리즘 코드카타
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.