2025-10-17 학습 기록

랏 뜨·2025년 10월 17일

📑 세부 학습 내용


📅 스케쥴

  • 3시간 30분 독서 + 궁금한 개념 조사 및 학습 + 1시간 코딩테스트 및 풀이 리뷰
  • 4시간 30분

🧷 학습 시간 인증


📖 도서 정독 및 실습

실전 레디스 : 기초, 실전, 고급 단계별로 배우는 레디스 핵심 가이드

  • 캐싱 등 RDB 의 보조 역할을 해줄 NoSQL 중 가장 범용적이고 유지보수가 잘 진행 중인 Redis 의 구조부터 기초, 심화 내용, 사용법 등을 확실하게 이해하여, 이후의 프로그래밍에 있어 자신 있고 근거 있게 레디스를 채택하고 사용할 수 있는 개발자를 목표로 독서 시작
  • 5.2.3 아키텍처 안티 패턴 (p.335) ~ 5.6.2 ACL 기능 (p.379)
  • 도서 내 모든 내용 이해 및 실습 완료
    • 궁금한 부분은 따로 조사 후 학습

✏️ 코딩 테스트

⭕ 문제 풀이

class Solution {

    int n;
    int[] dp;
    List<Integer> groups;

    public int solution(int[] cards) {
        n = cards.length;
        dp = new int[n];
        groups = new ArrayList<>();
        Arrays.fill(dp, 1);

        int group = -1;
        int groupIdx = 0;
        for (int i = 0; i < n; i++) {
            if (dp[i] < 0) {
                continue;
            }

            dp[i] = group;
            groups.add(1);

            int nextIdx = cards[i] - 1;
            while (dp[nextIdx] != group) {
                dp[nextIdx] = group;
                groups.set(groupIdx, groups.get(groupIdx) + 1);
                int curVal = cards[nextIdx];
                nextIdx = curVal - 1;
            }

            --group;
            ++groupIdx;
        }

        if (group >= -2) {
            return 0;
        }

        groups.sort((a, b) -> b - a);

        return groups.get(0) * groups.get(1);
    }
}
  • DP 및 사이클탐색 이용하여 문제 풀이
    • DP 배열에는 각 그룹을 담고, groups 리스트에 그룹 인원을 기록
    • 그룹이 하나면 0 반환
    • groups내림차순으로 정렬하여 큰 값 2개 추출하여 곱셈 후 반환
    • 코드 내에 불필요한 정보들과 비교적 복잡한 계산 부분이 존재하여, 명일 코드 최적화 진행 예정
  • 최종 시간복잡도 : O(N * logN)
    • 정렬 시간복잡도 : O(N * logN)
    • 최종 시간복잡도 : O(N * logN)

💡 어려웠던 것 || 알게 된 것


레디스 최악의 사례 7가지

profile
기록

0개의 댓글