JEon.E
일단 ML 엔지니어 생존일지
JEon.E
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • 논문 스터디 (8)
      • 논문 구현 (0)
      • Code-LLM (0)
      • ML attack (6)
      • Fuzzing (2)
    • 동향 및 조사 (3)
    • Stack Overflow (6)
    • Setting Tips (14)
    • ML 엔지니어링 (1)
      • AI Math (0)
      • Pytorch (1)
    • 알고리즘 (132)
      • 이론 (8)
      • 문제풀이 (105)
      • 삼성 기출 문제풀이 (18)
    • Hack (0)
      • 해킹 맛보기 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • BFS
  • 백트래킹
  • keras
  • 프로그래머스
  • BOJ
  • dp
  • 구현
  • 네이버 부스트캠프
  • greedy
  • 강화학습
  • 플로이드-워샬
  • Graph
  • 그래프
  • 크루스칼
  • Fuzzing 동향
  • Adversarial Defense
  • 다시
  • dfs
  • NLP black-box attack
  • 시뮬레이션

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JEon.E
알고리즘/문제풀이

[시뮬레이션] BOJ 17144 미세먼지 안녕!

알고리즘/문제풀이

[시뮬레이션] BOJ 17144 미세먼지 안녕!

2023. 7. 13. 12:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import sys
import copy
input = sys.stdin.readline
 
DELTAS = ((1, 0), (-1, 0), (0, 1), (0, -1))
R, C, T = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(R)]
 
# 시뮬레이션 문제
 
def diffuse(arr):
    new_arr = copy.deepcopy(arr)
    for y in range(R):
        for x in range(C):
            if arr[y][x] < 5: continue
            val = arr[y][x] // 5
            cnt = 0
            for dy, dx in DELTAS:
                ny = y + dy 
                nx = x + dx
                if ny < 0 or ny >= R or nx < 0 or nx >= C: continue 
                if arr[ny][nx] == -1: continue
                new_arr[ny][nx] += val
                cnt += 1
            new_arr[y][x] -= (val * cnt) 
    return new_arr
 
def clean_up(arr, y):
    prev = arr[y][1]
    arr[y][1] = 0
    for j in range(2, C-1):
        tmp =  arr[y][j]
        arr[y][j] = prev 
        prev = tmp
    for i in range(y, 0, -1):
        tmp = arr[i][C-1]
        arr[i][C-1] = prev 
        prev = tmp 
    for j in range(C-1, 0, -1):
        tmp = arr[0][j]
        arr[0][j] = prev 
        prev = tmp         
    for i in range(0, y):
        tmp = arr[i][0]
        arr[i][0] = prev 
        prev = tmp 
 
def clean_down(arr, y):
    prev = arr[y][1]
    arr[y][1] = 0
    for j in range(2, C-1):
        tmp =  arr[y][j]
        arr[y][j] = prev 
        prev = tmp
    for i in range(y, R-1):
        tmp = arr[i][C-1]
        arr[i][C-1] = prev 
        prev = tmp 
    for j in range(C-1, 0, -1):
        tmp = arr[R-1][j]
        arr[R-1][j] = prev 
        prev = tmp         
    for i in range(R-1, y, -1):
        tmp = arr[i][0]
        arr[i][0] = prev 
        prev = tmp 
 
            
clean_y = R
for i in range(R):
    if arr[i][0] == -1:
        clean_y = i 
        break
    
for t in range(T):
    arr = diffuse(arr)
    clean_up(arr, clean_y)
    clean_down(arr, clean_y+1)
 
print(sum([sum(a) for a in arr]) + 2)
Colored by Color Scripter
cs
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 문제풀이' 카테고리의 다른 글

[BFS] BOJ 13859 숨바꼭질 3  (0) 2023.07.20
[정렬] BOJ 18869 멀티버스 Ⅱ  (0) 2023.07.18
[BFS] BOJ 7576 토마토  (0) 2023.07.11
[DP] BOJ 2240 자두나무  (0) 2023.07.10
[백트래킹, 시뮬레이션] BOJ 12100 2048(easy)  (0) 2023.07.06
    '알고리즘/문제풀이' 카테고리의 다른 글
    • [BFS] BOJ 13859 숨바꼭질 3
    • [정렬] BOJ 18869 멀티버스 Ⅱ
    • [BFS] BOJ 7576 토마토
    • [DP] BOJ 2240 자두나무
    JEon.E
    JEon.E
    ML Security Engineer로 살아남기 도전중

    티스토리툴바

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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