😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[BAEKJOON python] 20056_λ§ˆλ²•μ‚¬ 상어와 νŒŒμ΄μ–΄λ³Ό λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[BAEKJOON python] 20056_λ§ˆλ²•μ‚¬ 상어와 νŒŒμ΄μ–΄λ³Ό

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 4. 6. 01:39
728x90
λ°˜μ‘ν˜•

 

λ§ˆλ²•μ‚¬ μƒμ–΄μ™€ νŒŒμ΄μ–΄λ³Ό
λ§ˆλ²•μ‚¬ μƒμ–΄κ°€ ν¬κΈ°κ°€ N×N인 κ²©μžμ— νŒŒμ΄μ–΄λ³Ό M개λ₯Ό λ°œμ‚¬
κ°€μž₯ μ²˜μŒμ— νŒŒμ΄μ–΄λ³Όμ€ κ°μž μœ„μΉ˜μ—μ„œ μ΄λ™μ„ λŒ€κΈ°
i번 νŒŒμ΄μ–΄λ³Όμ˜ μœ„μΉ˜λŠ” (ri, ci), μ§ˆλŸ‰μ€ mi이고, λ°©ν–₯은 di, μ†λ ₯은 si
격자의 ν–‰κ³Ό μ—΄μ€ 1λ²ˆλΆ€ν„° Nλ²ˆκΉŒμ§€ λ²ˆν˜Έ
νŒŒμ΄μ–΄λ³Όμ˜ λ°©ν–₯은 μ–΄λ–€ μΉΈκ³Ό μΈμ ‘ν•œ 8개의 μΉΈμ˜ λ°©ν–₯ (↑β†—→β†˜↓↙←β†–)

λ§ˆλ²•μ‚¬ μƒμ–΄κ°€ λͺ¨λ“  νŒŒμ΄μ–΄λ³Όμ—κ²Œ μ΄λ™μ„ λͺ…λ Ή
1. λͺ¨λ“  νŒŒμ΄μ–΄λ³Όμ΄ μžμ‹ μ˜ λ°©ν–₯ di둜 μ†λ ₯ siμΉΈ λ§ŒνΌ μ΄λ™
    μ΄λ™ν•˜λŠ” μ€‘μ—λŠ” κ°™μ€ μΉΈμ— μ—¬λŸ¬ κ°œμ˜ νŒŒμ΄μ–΄λ³Όμ΄ μžˆμ„ μˆ˜λ„ μžˆμŒ
2. μ΄λ™μ΄ λͺ¨λ‘ λλ‚œ λ’€, 2개 μ΄μƒμ˜ νŒŒμ΄μ–΄λ³Όμ΄ μžˆλŠ” μΉΈμ—μ„œμ˜ κ²½μš°
    a. κ°™μ€ μΉΈμ— μžˆλŠ” νŒŒμ΄μ–΄λ³Όμ€ λͺ¨λ‘ ν•˜λ‚˜λ‘œ ν•©μ³μ§
    b. νŒŒμ΄μ–΄λ³Όμ€ 4개의 νŒŒμ΄μ–΄λ³Όλ‘œ λ‚˜λˆ„어짐
    c. λ‚˜λˆ„어진 νŒŒμ΄μ–΄λ³Όμ˜ μ§ˆλŸ‰, μ†λ ₯, λ°©ν–₯
        - μ§ˆλŸ‰μ€ ⌊(합쳐진 νŒŒμ΄μ–΄λ³Ό μ§ˆλŸ‰μ˜ ν•©)/5⌋
        - μ†λ ₯은 ⌊(합쳐진 νŒŒμ΄μ–΄λ³Ό μ†λ ₯의 ν•©)/(합쳐진 νŒŒμ΄μ–΄λ³Όμ˜ κ°œμˆ˜)⌋
        - ν•©μ³μ§€λŠ” νŒŒμ΄μ–΄λ³Όμ˜ λ°©ν–₯이 λͺ¨λ‘ ν™€μˆ˜μ΄κ±°λ‚˜ λͺ¨λ‘ μ§μˆ˜μ΄λ©΄, λ°©ν–₯은 0, 2, 4, 6이고, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 1, 3, 5, 7
    d. μ§ˆλŸ‰μ΄ 0인 νŒŒμ΄μ–΄λ³Όμ€ μ†Œλ©Έλ˜μ–΄ μ—†μ–΄μ§

λ§ˆλ²•μ‚¬ μƒμ–΄κ°€ μ΄λ™μ„ K번 λͺ…λ Ήν•œ ν›„, λ‚¨μ•„μžˆλŠ” νŒŒμ΄μ–΄λ³Ό μ§ˆλŸ‰μ˜ ν•©

첫째 μ€„에 N, M, K
λ‘˜μ§Έ μ€„λΆ€ν„° M개의 μ€„에 νŒŒμ΄μ–΄λ³Όμ˜ μ •λ³΄ (ri, ci, mi, si, di)
μ„œλ‘œ λ‹€λ₯Έ 두 νŒŒμ΄μ–΄λ³Όμ˜ μœ„μΉ˜κ°€ 같은 κ²½μš°λŠ” μž…λ ₯으둜 주어지지 μ•ŠμŒ
# N×N인 κ²©μžμ— νŒŒμ΄μ–΄λ³Ό M개, 이동 λͺ…λ Ή 수 k
n, m, k = map(int, input().split())
# 8개의 칸의 λ°©ν–₯ (↑β†—→β†˜↓↙←β†–)
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
board = [[[] for _ in range(n)] for _ in range(n)]

for i in range(m):
    # νŒŒμ΄μ–΄λ³Όμ˜ μœ„μΉ˜λŠ” (ri, ci), μ§ˆλŸ‰μ€ mi이고, λ°©ν–₯은 di, 속λ ₯은 si
    r, c, mm, s, d = map(int, input().split())
    # ν˜„μž¬ νŒŒμ΄μ–΄λ³Όμ— ν–‰κ³Ό 열에 ν•΄λ‹Ήν•˜λŠ” 정보(μ§ˆλŸ‰, 속λ ₯, λ°©ν–₯) μ €μž₯
    board[r - 1][c - 1].append([mm, s, d])


def move():
    b = [[[] for _ in range(n)] for _ in range(n)]
    for i in range(n):
        for j in range(n):
            # νŒŒμ΄μ–΄λ³Όμ΄ μ—†λ‹€
            if len(board[i][j]) == 0:
                continue
            for p in board[i][j]:
                x, y = i, j
                mm, s, d = p
                # 이동 ν›„ μΉΈ 수 % N둜 처리
                nx = (x + dx[d] * s) % n
                ny = (y + dy[d] * s) % n
                b[nx][ny].append([mm, s, d])

    for i in range(n):
        for j in range(n):
            # νŒŒμ΄μ–΄λ³Όμ΄ ν•œ 개 μ΄ν•˜ 쑴재
            if len(b[i][j]) <= 1:
                continue
            # μ§ˆλŸ‰μ€ (합쳐진 νŒŒμ΄μ–΄λ³Ό μ§ˆλŸ‰μ˜ ν•©)/5
            # 속λ ₯은 (합쳐진 νŒŒμ΄μ–΄λ³Ό 속λ ₯의 ν•©)/(합쳐진 νŒŒμ΄μ–΄λ³Όμ˜ 개수)
            # ν•©μ³μ§€λŠ” νŒŒμ΄μ–΄λ³Όμ˜ λ°©ν–₯이 λͺ¨λ‘ ν™€μˆ˜ or 짝수
            #    λ°©ν–₯은 0, 2, 4, 6 그렇지 μ•ŠμœΌλ©΄ 1, 3, 5, 7
            mm_sum, s_sum, oodd, eeven = 0, 0, True, True
            num = len(b[i][j])
            for p in b[i][j]:
                mm, s, d = p
                mm_sum += mm
                s_sum += s
                # ν™€μˆ˜
                if (d % 2 == 1):
                    eeven = False
                else:
                    oodd = False

            # μ΄ˆκΈ°ν™” ν•΄μ£Όκ³  λ‹€μ‹œ μƒˆλ‘œμš΄ 정보 λ„£κΈ°
            b[i][j] = []
            # μ†Œλ©Έ~
            if mm_sum < 5:
                continue
            else:
                # λͺ¨λ‘ ν™€μˆ˜ μ΄κ±°λ‚˜ 짝수
                if eeven or oodd:
                    for q in [0, 2, 4, 6]:
                        b[i][j].append([mm_sum // 5, s_sum // num, q])
                else:
                    for q in [1, 3, 5, 7]:
                        b[i][j].append([mm_sum // 5, s_sum // num, q])

    for i in range(n):
        for j in range(n):
            board[i][j] = b[i][j]


for _ in range(k):
    move()

answer = 0
for i in range(n):
    for j in range(n):
        # ν˜„μž¬ λ‚¨μ•„μžˆλŠ” νŒŒμ΄μ–΄λ³Όμ˜ μ§ˆλŸ‰ν•©μ„ ꡬ해 좜λ ₯
        for b in board[i][j]:
            answer += b[0]
print(answer)

예제 μž…λ ₯

4 2 2
1 1 5 2 2
1 4 7 1 6

예제 좜λ ₯

8

 

 

이번 λ¬Έμ œλ„ μž¬λ°Œμ—ˆλ‹Ή

λ§ˆλ²•μ‚¬ .... ㅅㅏㅇ어 νŒŒμ΄μ–΄λ³Ό~

이뢄 κΊΌ μ°Έκ³ .. ^_^

https://developer-ellen.tistory.com/72

728x90
λ°˜μ‘ν˜•
Comments