2025-10-05 학습 기록

랏 뜨·2025년 10월 5일

🦾 오늘의 컨디션 및 특이사항(개인 일정 등)


  • 수면 시간
    • 8시간
  • 학습 시간
    • 13 : 00 ~ 17 : 00
    • 23 : 00 ~ 00 : 00
  • 특이사항

📑 세부 학습 내용


📅 스케쥴

  • 4시간 강의 + 궁금한 개념 조사 및 학습 + 1시간 코딩테스트 및 풀이 리뷰
  • 5시간

📺 인프런 강의

📺 김영한의 실전 데이터베이스 - 기본편 (김영한)

  • 데이터를 처리하기 위한 SQL 문법을 확실하게 마스터하는 것과 더불어, 특히 조인 및 인덱스의 정의 및 올바른 사용 방법을 확실하게 이해하여 쿼리 성능을 최적화 - 극대화할 수 있는 개발자로 성장하고, 추가로 데이터베이스에서의 트랜잭션 관련도 더 확실하게 이해하여 DB 쿼리 성능을 최대한 최적화 할 수 있는 성능에 민감한 개발자를 목표로 학습 시작
  • 58. 인덱스와 정렬 ~ 71. 기본 제약 조건 까지 학습 완료
  • 과정의 모든 내용 이해 및 실습 완료
  • 강의 내 퀴즈 모두 풀이 및 오답노트
  • 강의에 없는 내용 중 이해가 안 되거나 궁금한 부분은 따로 추가 학습 진행
  • 이전 내용 중 헷갈리는 부분 복습하면서 진행

✏️ 코딩 테스트

⭕ 풀이 코드

class Solution {

    int row = 5;
    int col = 5;

    public int[] solution(String[][] places) {
        int[] answer = new int[row];

        int idx = 0;
        placeLoop:
        for (String[] place : places) {
            List<int[]> people = new ArrayList<>();
            for (int i = 0; i < row; i++) {
                char[] chars = place[i].toCharArray();
                for (int j = 0; j < col; j++) {
                    if (chars[j] == 'P') {
                        people.add(new int[]{i, j});
                    }
                }
            }

            for (int i = 0; i < people.size(); i++) {
                int[] rc1 = people.get(i);
                for (int j = i + 1; j < people.size(); j++) {
                    int[] rc2 = people.get(j);
                    int distance = getManhattan(rc1[0], rc1[1], rc2[0], rc2[1]);
                    if (distance <= 1) {
                        answer[idx++] = 0;
                        continue placeLoop;
                    }

                    if (distance == 2) {
                        if (!isPossible(rc1, rc2, place)) {
                            answer[idx++] = 0;
                            continue placeLoop;
                        }
                    }
                }
            }

            answer[idx++] = 1;
        }

        return answer;
    }

    private int getManhattan(int r1, int c1, int r2, int c2) {
        return Math.abs(r1 - r2) + Math.abs(c1 - c2);
    }

    private boolean isPossible(int[] rc1, int[] rc2, String[] place) {
        int r1 = rc1[0];
        int c1 = rc1[1];
        int r2 = rc2[0];
        int c2 = rc2[1];

        if (r1 == r2) {
            int mid = (c1 + c2) / 2;
            if (place[r1].charAt(mid) != 'X') {
                return false;
            }
        } else if (c1 == c2) {
            int mid = (r1 + r2) / 2;
            if (place[mid].charAt(c1) != 'X') {
                return false;
            }
        } else {
            if (place[r1].charAt(c2) != 'X' || place[r2].charAt(c1) != 'X') {
                return false;
            }
        }

        return true;
    }
}
  • 배열 값 브루트포스를 이용해 해결
    • 맨해튼 거리를 구하여 1 이하일 때와, 2이고 조건에 반할 경우 0 저장
    • 그 외는 거리두기 준수로 참작하여 1 저장
  • 시간 복잡도 O(P * N * M)
    • P = N = M = 5
    • places 반복 - O(P)
      • 내부에서 nC2 반복 - O(N * M)
    • O(P * N * M) 의 시간복잡도 소요

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


  • 금일은 없음
profile
기록

0개의 댓글