πͺ [μ¬ν κ²μ]
3085λ²: μ¬ν κ²μ
μμ 3μ κ²½μ° 4λ² νμ Yμ Cλ₯Ό λ°κΎΈλ©΄ μ¬ν λ€ κ°λ₯Ό λ¨Ήμ μ μλ€.
www.acmicpc.net
π λ¬Έμ μ€λͺ
μκ·Όμ΄λ μ΄λ Έμ μ μ "λ΄λ³΄λ (Bomboni)" κ²μμ μ¦κ²¨νλ€.
κ°μ₯ μ²μμ N×Nν¬κΈ°μ μ¬νμ μ±μ λλλ€. μ¬νμ μμ λͺ¨λ κ°μ§ μμ μλ μλ€.
μκ·Όμ΄λ μ¬νμ μμ΄ λ€λ₯Έ μΈμ ν λ μΉΈμ κ³ λ₯Έλ€. κ·Έ λ€μ κ³ λ₯Έ μΉΈμ λ€μ΄μλ μ¬νμ μλ‘ κ΅ννλ€.
μ΄μ , λͺ¨λ κ°μ μμΌλ‘ μ΄λ£¨μ΄μ Έ μλ κ°μ₯ κΈ΄ μ°μ λΆλΆ(ν λλ μ΄)μ κ³ λ₯Έ λ€μ κ·Έ μ¬νμ λͺ¨λ λ¨Ήλλ€.
μ¬νμ΄ μ±μμ§ μνκ° μ£Όμ΄μ‘μ λ, μκ·Όμ΄κ° λ¨Ήμ μ μλ μ¬νμ μ΅λ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
ππ¨ μ μΆλ ₯ λ°μ΄ν°
[μ λ ₯]
첫째 μ€μ 보λμ ν¬κΈ° Nμ΄ μ£Όμ΄μ§λ€. (3 ≤ N ≤ 50)
λ€μ Nκ° μ€μλ 보λμ μ±μμ Έ μλ μ¬νμ μμμ΄ μ£Όμ΄μ§λ€.
λΉ¨κ°μμ C, νλμμ P, μ΄λ‘μμ Z, λ Έλμμ Yλ‘ μ£Όμ΄μ§λ€.
μ¬νμ μμ΄ λ€λ₯Έ μΈμ ν λ μΉΈμ΄ μ‘΄μ¬νλ μ λ ₯λ§ μ£Όμ΄μ§λ€.
3
CCP
CCP
PPC
[μΆλ ₯]
첫째 μ€μ μκ·Όμ΄κ° λ¨Ήμ μ μλ μ¬νμ μ΅λ κ°μλ₯Ό μΆλ ₯νλ€.
3
π λ¬Έμ νμ΄

ν΄λΉ λ¬Έμ λ λͺ¨λ κ²½μ°μ μλ₯Ό κ³ λ €ν΄μΌ νλ 'λΈλ£¨νΈν¬μ€ (Brute Force)', μμ νμ λ¬Έμ λ‘ λ€μμ λ κ³Όμ μ ν΅ν΄ λ΅μ λμΆν μ μλ€.
1. μΈμ ν λ μ¬νμ κ΅ννλ€. (λ¨, 2λ² ν μμμΉλ‘ 볡ꡬν κ²)
2. κ°μ₯ κΈ΄ μ°μλΆλΆ(ν λλ μ΄)μ ꡬνλ€.
μ΄λ NxNμΌλ‘ 2μ°¨μ λ°°μ΄μ΄λ―λ‘ μ΄μ€ forλ¬Έμ 0λΆν° nκΉμ§μ λ°λ³΅μ ν΅ν΄ κ΅νκ³Ό νμμ μ§νν΄μΌ νλ€. (O(N^2))
λ°λΌμ κ΅ν(1)κ³Ό νμ(2) λͺ¨λ μκ°λ³΅μ‘λ O(N^2)μ κ°μ§λ―λ‘ μ 체 μκ°λ³΅μ‘λλ O(N^4)μ΄λ€.
νλ κ΅ν λ° νμμ μνμ’μ° λ°©ν₯μ λͺ¨λ κ³ λ €ν΄μΌνλ€κ³ μ°©κ°ν μ μμ§λ§ μ΄λ μ€λ³΅μ κ²½μ°λ₯Ό ν¬ν¨νκΈ°μ 'μ°'μ 'ν'μ 쑰건μΌλ‘λ§ ν΄λΉμμΌλ μΆ©λΆνλ€. μ΄λ₯Ό μ΄μ©ν ν΄λΉ νμ΄μ μ½λλ μλμ κ°λ€.
def search_max_candy(n, candy_l): # κ³ μ λ μν©. μ΅λ μΊλ μλ§ μΈκΈ°.
count_max_row = 1
count_max_col = 1
for x in range(n):
count_row = 1
count_col = 1
for y in range(n - 1):
if candy_l[x][y] == candy_l[x][y + 1]: # 'μ°'μ λμΌ μ¬λΆ λΉκ΅.(row) (μΈλ‘ λ§μ§λ§ μ΄ λ°°μ )
count_row += 1
if count_max_row < count_row:
count_max_row = count_row
else:
count_row = 1
if candy_l[y][x] == candy_l[y+1][x]: # 'ν'μ λμΌ μ¬λΆ λΉκ΅.(col) (κ°λ‘ λ§μ§λ§ ν λ°°μ )
count_col += 1
if count_max_col < count_col:
count_max_col = count_col
else:
count_col = 1
return max(count_max_row, count_max_col)
input_n = int(input())
candy_list = [list(input()) for _ in range(input_n)]
count_ans = 0
for i in range(input_n):
for j in range(input_n):
# 'μ°'μ 'ν'μ κ²½μ°λ§ κ³ λ € - μΈμ ν μ¬νμ κ΅ν
if i + 1 < input_n : # 'ν'μ κ²½μ° - νμ΄ μ΅λ νμΌ κ²½μ°, 'ν' κ΅ν μ±λ¦½ X. λ°λΌμ ν΄λΉ κ²½μ° λ°°μ .
candy_list[i][j], candy_list[i + 1][j] = candy_list[i + 1][j], candy_list[i][j]
max_count = search_max_candy(input_n, candy_list)
if max_count > count_ans:
count_ans = max_count
candy_list[i][j], candy_list[i + 1][j] = candy_list[i + 1][j], candy_list[i][j]
if j + 1 < input_n : # 'μ°'μ κ²½μ° - νμ΄ μ΅λ νμΌ κ²½μ°, 'μ°' κ΅ν μ±λ¦½ X. λ°λΌμ ν΄λΉ κ²½μ° λ°°μ .
candy_list[i][j], candy_list[i][j+1] = candy_list[i][j+1], candy_list[i][j]
max_count = search_max_candy(input_n, candy_list)
if max_count > count_ans:
count_ans = max_count
candy_list[i][j], candy_list[i][j+1] = candy_list[i][j+1], candy_list[i][j]
print(count_ans)
μμ νμ΄μ κ²½μ° μνμ’μ°μμ 'μ°'μ 'ν'λ‘ κ²½μ°μ μλ₯Ό μ€μμμλ μ΄μ€ forλ¬Έμ λλ² μ°μνμ¬ μ½ νλ―λ‘ μ 체 μκ° λ³΅μ‘λμ κ²½μ° κ·Έλλ‘ 'O(N^4)'μ΄λ€. π‘
λ€νμ€λ½κ²λ Nμ λ²μκ° 50μ΄νλ‘ μκΈ°μ, μμ νμ΄λ‘ νμ΄λ μκ° μ νμ μΆ©λΆνλ€.
νλ λ§μ½ Nμ λ²μκ° 500μΌ κ²½μ° Nμ λ€μ κ³±μ 1μ΅μ λκΈ°μ 1μ΄ μ νμκ°μ μμλκ² λλ€.
κ·Έλ λ€λ©΄ μ΄λ₯Ό μ΄λ»κ² λ ν¨μ¨μ μΈ μ½λλ‘ λ°κΏ μ μμκΉ?
κ΅ν ν νμνλ μ½λλ₯Ό 보면, λ§€λ² κ΅ν μ΄ν μ΄μ€ forλ¬Έμ ν΅ν΄ λͺ¨λ NxNμ νμνλ κ²μ μ μ μλ€. νλ, μ¬μ€ μμμ λ μΉΈμ λ³κ²½ν κ²½μ° μ λ΅μ λ³νκ° μλ κ²μ μ΅λ 3κ°μ νκ³Ό μ΄μ΄κΈ°μ μ΄λ λ§€μ° λΉν¨μ¨μ μ΄λ€. λ°λΌμ μ΄λ₯Ό κ³ λ €νμ¬ μλμ κ°μ΄ νμ΄λ₯Ό ꡬνν μ μλ€.
// μ΄ν μ½λλ μλ΅
π νμ΄/κ°λ μ 리
- μ΄μ€ 리μ€νΈ μ»΄ν리ν¨μ
: 리μ€νΈ_λ€μ= [list(input()) for _ in range(N)] - νμ΄μ¬ swap
: a,b = b,a - (TIP) 2μ°¨μ λ°°μ΄ λ± λ°°μ΄ λ¬Έμ → x(row), y(col) λ³μ κ³ μ νκΈ°.
'Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [λ°±μ€] 1107. 리λͺ¨μ»¨ (0) | 2022.03.01 |
|---|---|
| [λ°±μ€] 1476. λ μ§ κ³μ° (0) | 2022.03.01 |
| [λ°±μ€] 2309. μΌκ³± λμμ΄ (0) | 2022.02.22 |
| [κΈ°μ΄] 08. κΈ°λ³Έ μν 1 (μμ± δΈ) (0) | 2022.02.22 |
| [κΈ°μ΄] 06. ν¨μ (0) | 2022.02.21 |