GreatAlgorithm-Study / AlgorithmStudy

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

[7주차_월요일] 시공의 돌풍 #81

Closed KodaHye closed 3 weeks ago

KodaHye commented 1 month ago
### 🤔 시간복잡도 고려사항

### 💡 풀이 아이디어
KodaHye commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

Jewan1120 commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

  1. 확산 구현 spread()
    • 기존 배열의 확산하는 양에 영향을 주지 않기 위해서 변화량 배열 만들어 확산되는 양을 저장함
    • 확산이 끝났다면 기존 배열과 변화량 배열을 합하여 최종적으로 확산된 배열을 만들어 줌
  2. 회전 구현 rotate()
    • 윗 회전과 아랫 회전을 따로 진행
    • 처음 회전을 시작하는 좌표에서 회전을 하여 시공의 돌풍의 좌표까지 도달했다면 회전을 멈춤
  3. 총합 계산 calculate()
    • 시공의 돌풍의 값이 -1 x 2이므로 +2로 전처리를 한 후 합을 계산
yeongleej commented 1 month ago

🤔 시간복잡도 고려사항


💡 풀이 아이디어

1. spread(): 먼지확산

2. clean(): 돌풍 청소

baexxbin commented 1 month ago

🤔 시간복잡도 고려사항


💡 풀이 아이디어

  1. 먼지 확산 (diffusion())

    • 전체 먼지 돌면서 조건에 맞게 먼지 확산
    • dust배열을 둬서 확산된 먼지들 저장 후, 모든 먼지가 다 돈 후 기존 배열에 dust값 더하기
  2. 청소기 실행 (cleanUp(), cleanDown())

    • 각 청소기의 흐름대로 큐에 먼지들 넣어줌
    • 큐에서 먼지를 빼면서 먼지들 한칸씩 이동
    • cleanUp(): (R,0) -> (R,M) -> (0,M) -> (0,0) -> (0,0)
    • cleanDown(): (R,0) -> (R,M) -> (N,M) -> (N,0) -> (R,0)
    • 이때 꼭짓점 좌표들 겹치지 않도록 주의
    • 맨처음 청소기 바람 0 넣기, 청소 다 끝난 후 청소기 -1 표시
icegosimperson commented 1 month ago

🤔 시간복잡도 고려사항

6 ≤ n, m ≤ 50 -> 주어진 시간 내 구현 가능

💡 풀이 아이디어

  1. 먼지 확산 spread()
    • 각 칸에 먼지가 인접한 4방향 (상하좌우)로 확산
    • 확산된 먼지 양 = (해당칸의 먼지 양) / 5
    • 확산된 먼지를 임시 배열temp에 저장 -> 확산 -> 원래 배열에 반영
  2. 시공의 돌풍 clean()
    • 시공의 돌풍 위치(윗부분, 아랫부분)를 clean 함수에 반복문으로 구현
    • 윗부분(반시계 방향)
    • (i, 0) -> (i-1, 0) 아래에서 위로 이동
    • (0, i) -> (0, i+1) 왼쪽에서 오른쪽으로 이동
    • (i, m-1) -> (i+1, m-1) 위에서 아래로 이동
    • (top, i) -> (top, i-1) 오른쪽에서 왼쪽으로 이동
    • 아랫부분 (시계 방향)
    • (i, 0) -> (i+1, 0) 위에서 아래로 이동
    • (n-1, i) -> (n-1, i+1) 왼쪽에서 오른쪽으로 이동
    • (i, m-1) -> (i-1, m-1) 아래에서 위로 이동
    • (bottom, i) -> (bottom, i-1) 오른쪽에서 왼쪽으로 이동
yeahdy commented 1 month ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어