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

[BAEKJOON python] 21608_상어 μ΄ˆλ“±ν•™κ΅ λ³Έλ¬Έ

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

[BAEKJOON python] 21608_상어 μ΄ˆλ“±ν•™κ΅

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 4. 8. 22:47
728x90
λ°˜μ‘ν˜•
μƒμ–΄μ΄ˆλ“±ν•™κ΅
상어 μ΄ˆλ“±ν•™κ΅μ—λŠ” κ΅μ‹€μ΄ ν•˜λ‚˜ μžˆκ³ , κ΅μ‹€μ€ N×N ν¬κΈ°μ˜ κ²©μž
학ꡐ에 λ‹€λ‹ˆλŠ” ν•™μƒμ˜ μˆ˜λŠ” N2λͺ…

λͺ¨λ“  ν•™μƒμ˜ μžλ¦¬λ₯Ό μ •ν•˜λŠ” λ‚ 
학생은 1λ²ˆλΆ€ν„° N2λ²ˆκΉŒμ§€ λ²ˆν˜Έκ°€ λ§€κ²¨μ Έ μžˆκ³ , (r, c)λŠ” rν–‰ c열을 μ˜λ―Έ
κ΅μ‹€μ˜ κ°€μž₯ μ™Όμͺ½ μœ— μΉΈμ€ (1, 1)이고, κ°€μž₯ μ˜€λ₯Έμͺ½ μ•„λž« μΉΈμ€ (N, N)

μ„ μƒλ‹˜μ€ ν•™μƒμ˜ μˆœμ„œλ₯Ό μ •ν–ˆκ³ , κ° ν•™μƒμ΄ μ’‹μ•„ν•˜λŠ” ν•™μƒ 4λͺ…도 λͺ¨λ‘ μ‘°μ‚¬
κ·œμΉ™μ„ μ΄μš©ν•΄ μ •ν•΄μ§„ μˆœμ„œλŒ€λ‘œ ν•™μƒμ˜ μžλ¦¬λ₯Ό μ •ν•˜κΈ°
ν•œ μΉΈμ—λŠ” ν•™μƒ ν•œ λͺ…μ˜ μžλ¦¬λ§Œ μžˆμ„ μˆ˜ μžˆκ³ , r1 - r2| + |c1 - c2| = 1을 λ§Œμ‘±ν•˜λŠ” λ‘ μΉΈμ΄ (r1, c1)κ³Ό (r2, c2)λ₯Ό μΈμ ‘ν•˜λ‹€
    1) λΉ„μ–΄μžˆλŠ” μΉΈ μ€‘μ—μ„œ μ’‹μ•„ν•˜λŠ” ν•™μƒμ΄ μΈμ ‘ν•œ μΉΈμ— κ°€μž₯ λ§Žμ€ μΉΈμœΌλ‘œ μžλ¦¬λ₯Ό μ •ν•œλ‹€
    2) 1을 λ§Œμ‘±ν•˜λŠ” μΉΈμ΄ μ—¬λŸ¬ κ°œμ΄λ©΄, μΈμ ‘ν•œ μΉΈ μ€‘μ—μ„œ λΉ„μ–΄μžˆλŠ” μΉΈμ΄ κ°€μž₯ λ§Žμ€ μΉΈμœΌλ‘œ μžλ¦¬λ₯Ό μ •ν•œλ‹€
    3) 2λ₯Ό λ§Œμ‘±ν•˜λŠ” μΉΈλ„ μ—¬λŸ¬ κ°œμΈ κ²½μš°μ—λŠ” ν–‰μ˜ λ²ˆν˜Έκ°€ κ°€μž₯ μž‘은 μΉΈμœΌλ‘œ,
        κ·ΈλŸ¬ν•œ μΉΈλ„ μ—¬λŸ¬ κ°œμ΄λ©΄ μ—΄μ˜ λ²ˆν˜Έκ°€ κ°€μž₯ μž‘은 μΉΈμœΌλ‘œ μžλ¦¬λ₯Ό μ •ν•œλ‹€
ν•™μƒμ˜ λ§Œμ‘±λ„λ₯Ό κ΅¬ν•΄μ•Ό ν•œλ‹€
    ν•™μƒμ˜ λ§Œμ‘±λ„λŠ” μžλ¦¬ λ°°μΉ˜κ°€ λͺ¨λ‘ λλ‚œ ν›„에 κ΅¬ν•  μˆ˜ μžˆλ‹€
    κ·Έ ν•™μƒκ³Ό μΈμ ‘ν•œ μΉΈμ— μ•‰μ€ μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ μˆ˜λ₯Ό κ΅¬ν•΄μ•Ό ν•œλ‹€
    κ·Έ κ°’이 0이면 ν•™μƒμ˜ λ§Œμ‘±λ„λŠ” 0, 1이면 1, 2이면 10, 3이면 100, 4이면 1000

ν•™μƒμ˜ λ§Œμ‘±λ„μ˜ μ΄ ν•©μ„ κ΅¬ν•΄λ³΄μž

첫째 μ€„에 N이 μ£Όμ–΄μ§„λ‹€
λ‘˜μ§Έ μ€„λΆ€ν„° N2개의 μ€„에 ν•™μƒμ˜ λ²ˆν˜Έμ™€ κ·Έ ν•™μƒμ΄ μ’‹μ•„ν•˜λŠ” ν•™μƒ 4λͺ…μ˜ λ²ˆν˜Έκ°€ ν•œ μ€„에 ν•˜λ‚˜μ”© μ„ μƒλ‹˜μ΄ μžλ¦¬λ₯Ό μ •ν•  μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§„λ‹€
    ν•™μƒμ˜ λ²ˆν˜ΈλŠ” μ€‘λ³΅λ˜μ§€ μ•ŠμœΌλ©°, μ–΄λ–€ ν•™μƒμ΄ μ’‹μ•„ν•˜λŠ” ν•™μƒ 4λͺ…은 λͺ¨λ‘ λ‹€λ₯Έ ν•™μƒ
    ν•™μƒμ˜ λ²ˆν˜Έ, μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ λ²ˆν˜ΈλŠ” N2보닀 μž‘κ±°λ‚˜ κ°™μ€ μžμ—°μˆ˜
# ꡐ싀은 N×N 크기의 격자
n = int(input())
# 학ꡐ에 λ‹€λ‹ˆλŠ” ν•™μƒμ˜ μˆ˜λŠ” N^2λͺ…
p = n * n
classroom = [[0] * n for _ in range(n)]
# 각 학생 μΈλ±μŠ€μ— λ§žλŠ” μ’‹μ•„ν•˜λŠ” μ‚¬λžŒμ„ μ €μž₯
like_room = [[] for _ in range(p + 1)]

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

for _ in range(p) :
    # ν•™μƒμ˜ λ²ˆν˜Έμ™€ κ·Έ 학생이 μ’‹μ•„ν•˜λŠ” 학생 4λͺ…μ˜ 번호
    array = list(map(int, input().split()))
    # 각 학생 μΈλ±μŠ€μ— λ§žλŠ” μ’‹μ•„ν•˜λŠ” μ‚¬λžŒμ„ μ €μž₯
    like = array[1:]
    # ν•™μƒμ˜ 번호 λ„£μœΌλ©΄ 그거에 λ§žλŠ” μ’‹μ•„ν•˜λŠ” 학생 4λͺ… λ‚˜μ˜΄
    like_room[array[0]] = like
    if p == 0 :
        classroom[1][1] = array[0]
        continue
    
    temp = []
    for i in range(n) :
        for j in range(n) :
            sum_like, sum_empty = 0, 0
            if classroom[i][j] != 0 :
                continue
            for k in range(4) :
                nx = i + dx[k]
                ny = j + dy[k]
                if nx < 0 or nx > n - 1 or ny < 0 or ny > n - 1 :
                    continue
                # ν•΄λ‹Ή μžλ¦¬μ—μ„œ μΈμ ‘ν•œ 곳에 μ’‹μ•„ν•˜λŠ” ν•™μƒμžˆμœΌλ©΄ +1
                if classroom[nx][ny] in like :
                    sum_like += 1
                # μΈμ ‘ν•œ 곳이 빈 경우일 λ•Œ +1
                if classroom[nx][ny] == 0 :
                    sum_empty += 1
            # sum_like, sum_empty, (i,j => ν•΄λ‹Ή ν–‰,μ—΄κ°’)
            temp.append((sum_like, sum_empty, (i, j)))
    # μ’‹μ•„ν•˜λŠ” μ‚¬λžŒ 수 λ§Žμ€ μΉΈ > 빈 μΉΈ μ—¬λŸ¬κ°œ > ν–‰ 적은 κ³³ > μ—΄ 적은 κ³³
    temp.sort(key = lambda x : (-x[0], -x[1], x[2]))  # -λ₯Ό 뢙이면, ν˜„μž¬μ™€ λ°˜λŒ€λ‘œ μ •λ ¬ (λ‚΄λ¦Όμ°¨μˆœ)
    # classroom 리슀트의 ν•΄λ‹Ή ν–‰, 열에 학생 번호둜 λ³€κ²½
    classroom[temp[0][2][0]][temp[0][2][1]] = array[0]

sum_answer = 0
for i in range(n) :
    for j in range(n) :
        answer = 0
        # # ν•˜λ‚˜ν•˜λ‚˜ 인접 지역에 μ–Όλ§ˆλ‚˜ μ’‹μ•„ν•˜λŠ” 학생이 λ°°μΉ˜λ˜μ—ˆλŠ”μ§€ 확인
        for k in range(4) :
            nx = i + dx[k]
            ny = j + dy[k]
            if nx < 0 or nx > n - 1 or ny < 0 or ny > n - 1 :
                continue
            if classroom[nx][ny] in like_room[classroom[i][j]] :
                answer += 1
                continue
        if answer != 0 :
            # ν•™μƒμ˜ λ§Œμ‘±λ„λ₯Ό 계산
            sum_answer += (10 ** (answer -1))
print(sum_answer)

예제 μž…λ ₯ 

3
4 2 5 1 7
3 1 9 4 5
9 8 1 2 3
8 1 9 3 4
7 2 3 4 8
1 9 2 5 7
6 5 2 3 4
5 1 9 2 8
2 9 3 1 4

예제 좜λ ₯

54

 

 

 

γ…Žγ…Ž μž¬λ°Œλ„Ή ^^

κ°μ‚¬ν•©λ‹ˆλ‹€!

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

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