J1Yun
ZU-TECHLOG
J1Yun
전체 방문자
였늘
μ–΄μ œ
  • πŸ“‘ Category (135)
    • Algorithm (61)
      • πŸ“š Concept (6)
      • πŸ“˜ Baekjoon Judge (53)
      • πŸ“— Programmers (2)
    • Computer Science (42)
      • πŸ”’ Operating System (14)
      • πŸ“‘ Network (15)
      • πŸ’Ύ Database (8)
      • 🧩 Design Pattern (4)
      • πŸ”‘ Security (1)
    • Activities (12)
      • 🦁 λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 9κΈ° (6)
      • πŸ’» SWλ§ˆμ—μŠ€νŠΈλ‘œ 13κΈ° (6)
    • Infra (1)
      • ☁️ AWS (1)
    • Languages (1)
      • πŸ’™ Python (1)
    • Backend (7)
      • πŸ”΅ Django (4)
      • 🟒 Node.js (3)
    • Ect. (8)
      • πŸ’¬ Talk (0)
      • πŸ—‚οΈ 개발직ꡰ μ·¨μ—… μ€€λΉ„μžλ£Œ (8)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

250x250
hELLO Β· Designed By μ •μƒμš°.
J1Yun

ZU-TECHLOG

[BOJ] λ°±μ€€ 21608번 상어 μ΄ˆλ“±ν•™κ΅ - 파이썬(Python)
Algorithm/πŸ“˜ Baekjoon Judge

[BOJ] λ°±μ€€ 21608번 상어 μ΄ˆλ“±ν•™κ΅ - 파이썬(Python)

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λ₯Ό λ§Œμ‘±ν•˜λŠ” 칸도 μ—¬λŸ¬ 개인 κ²½μš°μ—λŠ” ν–‰μ˜ λ²ˆν˜Έκ°€ κ°€μž₯ μž‘μ€ 칸으둜, κ·ΈλŸ¬ν•œ 칸도 μ—¬λŸ¬ 개이면 μ—΄μ˜ λ²ˆν˜Έκ°€ κ°€μž₯ μž‘μ€ 칸으둜 자리λ₯Ό μ •ν•œλ‹€.

예λ₯Ό λ“€μ–΄, N = 3이고, 학생 N2λͺ…μ˜ μˆœμ„œμ™€ 각 학생이 μ’‹μ•„ν•˜λŠ” 학생이 λ‹€μŒκ³Ό 같은 경우λ₯Ό μƒκ°ν•΄λ³΄μž.

ν•™μƒμ˜ λ²ˆν˜Έμ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ 번호

ν•™μƒμ˜ 번호 μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ 번호
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

κ°€μž₯ λ¨Όμ €, 4번 ν•™μƒμ˜ 자리λ₯Ό μ •ν•΄μ•Ό ν•œλ‹€. ν˜„μž¬ κ΅μ‹€μ˜ λͺ¨λ“  칸은 빈 칸이닀. 2번 쑰건에 μ˜ν•΄ μΈμ ‘ν•œ μΉΈ μ€‘μ—μ„œ λΉ„μ–΄μžˆλŠ” 칸이 κ°€μž₯ λ§Žμ€ 칸인 (2, 2)이 4번 ν•™μƒμ˜ μžλ¦¬κ°€ λœλ‹€.

     
  4  
     

λ‹€μŒ 학생은 3λ²ˆμ΄λ‹€. 1번 쑰건을 λ§Œμ‘±ν•˜λŠ” 칸은 (1, 2), (2, 1), (2, 3), (3, 2) 이닀. 이 칸은 λͺ¨λ‘ λΉ„μ–΄μžˆλŠ” μΈμ ‘ν•œ 칸이 2κ°œμ΄λ‹€. λ”°λΌμ„œ, 3번 쑰건에 μ˜ν•΄ (1, 2)κ°€ 3번 ν•™μƒμ˜ μžλ¦¬κ°€ λœλ‹€.

  3  
  4  
     

λ‹€μŒμ€ 9번 학생이닀. 9번 학생이 μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ λ²ˆν˜ΈλŠ” 8, 1, 2, 3이고, 이 쀑에 3은 μžλ¦¬μ— μ•‰μ•„μžˆλ‹€. μ’‹μ•„ν•˜λŠ” 학생이 κ°€μž₯ 많이 μΈμ ‘ν•œ 칸은 (1, 1), (1, 3)이닀. 두 μΉΈ λͺ¨λ‘ λΉ„μ–΄μžˆλŠ” μΈμ ‘ν•œ 칸이 1개이고, ν–‰μ˜ λ²ˆν˜Έλ„ 1이닀. λ”°λΌμ„œ, 3번 쑰건에 μ˜ν•΄ (1, 1)이 9번 ν•™μƒμ˜ μžλ¦¬κ°€ λœλ‹€.

9 3  
  4  
     

μ΄λ²ˆμ— 자리λ₯Ό μ •ν•  학생은 8번 학생이닀. (2, 1)이 8번 학생이 μ’‹μ•„ν•˜λŠ” 학생과 κ°€μž₯ 많이 μΈμ ‘ν•œ 칸이기 λ•Œλ¬Έμ—, μ—¬κΈ°κ°€ κ·Έ ν•™μƒμ˜ μžλ¦¬μ΄λ‹€.

9 3  
8 4  
     

7번 ν•™μƒμ˜ 자리λ₯Ό μ •ν•΄λ³΄μž. 1번 쑰건을 λ§Œμ‘±ν•˜λŠ” 칸은 (1, 3), (2, 3), (3, 1), (3, 2)둜 총 4κ°œκ°€ 있고, λΉ„μ–΄μžˆλŠ” μΉΈκ³Ό κ°€μž₯ 많이 μΈμ ‘ν•œ 칸은 (2, 3), (3, 2)이닀. ν–‰μ˜ λ²ˆν˜Έκ°€ μž‘μ€ (2, 3)이 7번 ν•™μƒμ˜ μžλ¦¬κ°€ λœλ‹€.

9 3  
8 4 7
     

μ΄λŸ°μ‹μœΌλ‘œ ν•™μƒμ˜ 자리λ₯Ό λͺ¨λ‘ μ •ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

9 3 2
8 4 7
5 6 1

이제 ν•™μƒμ˜ λ§Œμ‘±λ„λ₯Ό ꡬ해야 ν•œλ‹€. ν•™μƒμ˜ λ§Œμ‘±λ„λŠ” 자리 λ°°μΉ˜κ°€ λͺ¨λ‘ λλ‚œ 후에 ꡬ할 수 μžˆλ‹€. ν•™μƒμ˜ λ§Œμ‘±λ„λ₯Ό κ΅¬ν•˜λ €λ©΄ κ·Έ 학생과 μΈμ ‘ν•œ 칸에 앉은 μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ 수λ₯Ό ꡬ해야 ν•œλ‹€. κ·Έ 값이 0이면 ν•™μƒμ˜ λ§Œμ‘±λ„λŠ” 0, 1이면 1, 2이면 10, 3이면 100, 4이면 1000이닀.

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

 

μž…λ ₯

첫째 쀄에 N이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N2개의 쀄에 ν•™μƒμ˜ λ²ˆν˜Έμ™€ κ·Έ 학생이 μ’‹μ•„ν•˜λŠ” 학생 4λͺ…μ˜ λ²ˆν˜Έκ°€ ν•œ 쀄에 ν•˜λ‚˜μ”© μ„ μƒλ‹˜μ΄ 자리λ₯Ό μ •ν•  μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§„λ‹€.

ν•™μƒμ˜ λ²ˆν˜ΈλŠ” μ€‘λ³΅λ˜μ§€ μ•ŠμœΌλ©°, μ–΄λ–€ 학생이 μ’‹μ•„ν•˜λŠ” 학생 4λͺ…은 λͺ¨λ‘ λ‹€λ₯Έ ν•™μƒμœΌλ‘œ 이루어져 μžˆλ‹€. μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” ν•™μƒμ˜ 번호, μ’‹μ•„ν•˜λŠ” ν•™μƒμ˜ λ²ˆν˜ΈλŠ” N2보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. μ–΄λ–€ 학생이 자기 μžμ‹ μ„ μ’‹μ•„ν•˜λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

첫째 쀄에 ν•™μƒμ˜ λ§Œμ‘±λ„μ˜ 총 합을 좜λ ₯ν•œλ‹€.

 

https://www.acmicpc.net/problem/21608

 

21608번: 상어 μ΄ˆλ“±ν•™κ΅

상어 μ΄ˆλ“±ν•™κ΅μ—λŠ” ꡐ싀이 ν•˜λ‚˜ 있고, ꡐ싀은 N×N 크기의 격자둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. 학ꡐ에 λ‹€λ‹ˆλŠ” ν•™μƒμ˜ μˆ˜λŠ” N2λͺ…이닀. μ˜€λŠ˜μ€ λͺ¨λ“  ν•™μƒμ˜ 자리λ₯Ό μ •ν•˜λŠ” 날이닀. 학생은 1λ²ˆλΆ€ν„° N2λ²ˆκΉŒμ§€ 번호

www.acmicpc.net

 

πŸ’‘ 풀이 및 μ½”λ“œ

data = {}
n = int(input())
for _ in range(n**2):
    s, f1, f2, f3, f4 = map(int, input().split())
    data[s] = [f1, f2, f3, f4]

seats = [[0]*n for _ in range(n)]
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]

for student, friends in list(data.items()):
    result = (0, 0, -n+1, -n+1)
    for x in range(n):
        for y in range(n):
            if seats[x][y]:
                continue
            friend_cnt, empty_cnt = 0, 0
            for k in range(4):
                nx, ny = x + dx[k], y + dy[k]
                if nx < 0 or nx >= n or ny < 0 or ny >= n:
                    continue
                if seats[nx][ny] == 0:
                    empty_cnt += 1
                    continue
                if seats[nx][ny] in friends:
                    friend_cnt += 1
                    continue
            result = max(result, (friend_cnt, empty_cnt, -x, -y))
    x, y = -result[-2], -result[-1]
    seats[x][y] = student

answer = 0
for x in range(n):
    for y in range(n):
        student = seats[x][y]
        count = 0
        for k in range(4):
            nx, ny = x + dx[k], y + dy[k]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if seats[nx][ny] in data[student]:
                count += 1
        if count == 0:
            continue
        answer += 10**(count-1)

print(answer)

N은 20보닀 μž‘κ±°λ‚˜ κ°™μ•„ μ΅œλŒ€ 학생 수 λŠ” 400λͺ…이기 λ•Œλ¬Έμ— 완전탐색을 κ³ λ €ν•΄λ³Ό 수 μžˆλ‹€. 각 학생에 λŒ€ν•΄ 각 자리λ₯Ό μˆœνšŒν•˜λ©° λ§Œμ‘±λ„κ°€ κ°€μž₯ 높은 μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ§€μ •ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ‹¨μˆœνžˆ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

728x90

'Algorithm > πŸ“˜ Baekjoon Judge' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λ°±μ€€ 21609번 상어 쀑학ꡐ - 파이썬(Python)  (1) 2022.10.07
[BOJ] λ°±μ€€ 17144번 λ―Έμ„Έλ¨Όμ§€ μ•ˆλ…•! - 파이썬(Python)  (0) 2022.08.26
[BOJ] λ°±μ€€ 15685번 λ“œλž˜κ³€ 컀브 - 파이썬(Python)  (0) 2022.08.23
[BOJ] λ°±μ€€ 2133번 타일 μ±„μš°κΈ° - 파이썬(Python)  (0) 2022.08.18
[BOJ] λ°±μ€€ 2294번 동전 2 - 파이썬(Python)  (0) 2022.08.18
    'Algorithm/πŸ“˜ Baekjoon Judge' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ 글이닀
    • [BOJ] λ°±μ€€ 21609번 상어 쀑학ꡐ - 파이썬(Python)
    • [BOJ] λ°±μ€€ 17144번 λ―Έμ„Έλ¨Όμ§€ μ•ˆλ…•! - 파이썬(Python)
    • [BOJ] λ°±μ€€ 15685번 λ“œλž˜κ³€ 컀브 - 파이썬(Python)
    • [BOJ] λ°±μ€€ 2133번 타일 μ±„μš°κΈ° - 파이썬(Python)
    J1Yun
    J1Yun
    개발 κ΄€λ ¨ 기술 및 곡뢀 λ‚΄μš© 기둝μž₯

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”