GreatAlgorithm-Study / AlgorithmStudy

🌟알고리즘 대장정🌟
6 stars 4 forks source link

[4주차_월요일] 토스트 계란틀 #37

Closed yeahdy closed 1 month ago

yeahdy commented 1 month ago
yeongleej commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

baexxbin commented 1 month ago

🤔 시간복잡도 고려사항


💡 풀이 아이디어

무한루프 탈출 조건을 잘 설정하자!

icegosimperson commented 1 month ago

🤔 시간복잡도 고려사항 n<= 50, n*n = 250 BFS O(N^2)로 구현

💡 풀이 아이디어

  1. 조건 확인 후 그룹 형성 :L <= 두 계란 틀 <= R조건을 만족하는 계란들을 BFS로 묶음
  2. 계란 합, 평균 계산 : 조건을 만족하는 인접한 계란 양의 합을 구하고 change() 함수를 통해 그룹 내 계란 틀의 계란 양을 평균값으로 재설정
  3. 계란 양 재설정 : ArrayList에 저장된 모든 계란틀에 계산한 평균값 업데이트 -> 계란 이동 처리

★ 지난주 주신 피드백 반영 1) 좌표 row, column으로 설정 (오른쪽, 아래, 왼쪽, 위)

    static int[] dr = {0, 1, 0, -1};  // 행(row) 
    static int[] dc = {1, 0, -1, 0};  // 열(column) 

2) 좌표 class로 설정

 public static class Node {
        int r, c; 
        public Node(int r, int c) {
            this.r = r;
            this.c = c;
        }
    }

3) isRange 함수로 범위 체크

    private static boolean isRange(int r, int c) { // 배열의 범위를 벗어나지 않는지 확인
        return r >= 0 && r < n && c >= 0 && c < n; 
    }

Node Class 설정하는게 낯설고 어려웠습니다

KodaHye commented 1 month ago

🤔 시간복잡도 고려사항

BFS(50 × 100 × 4) × 2000 < 1억 이므로 주어진대로 구현해도 됨


💡 풀이 아이디어

BFS를 통해 상, 하, 좌, 우 계란선이 분리될 수 있는지 확인 분리 이후 다시 계란틀의 계란양이 업데이트 되야하므로 BFS에 사용할 큐 외에 따로 좌표를 저장할 큐가 필요

  • ArrayDeque<Point> q: BFS를 할 때 사용할 큐
  • ArrayDeque<Point> tmp: 방문한 계란틀의 위치 저장할 큐
  • int cnt: 계란틀의 총 개수
  • int sum: 합쳐진 계란의 총 합
  • boolean flag: 분리될 수 있는 계란선이 있는지 확인하는 변수
  • BFS를 통해 두 계란틀의 계란 차이가 L이상 R이하가 되는지 확인
  • 조건 만족한다면 tmp에 위치 저장
  • cntsum 업데이트
  • BFS가 끝나면 tmp큐가 빌 때까지 반복하면서 방문했던 계란틀의 위치의 값을 sum / cnt로 업데이트
Jewan1120 commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

yeahdy commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어