Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’» μ½”ν…Œ/πŸ“Œ Python

[μ½”ν…Œ/Python] μƒμž μ•ˆ

λ°˜μ‘ν˜•

 

 

 

 

πŸ“‘ 문제

  • N * M 격자둜 ν‘œν˜„ν•  수 μžˆλŠ” λ°”λ‹₯ μœ„μ— μƒμžμ™€ 곡이 λ†“μ—¬μžˆλ‹€.
    • X: μƒμžμ˜ μœ„μΉ˜
    • O: 곡의 μœ„μΉ˜
    • . : 빈칸
  • μƒμžλŠ” μ§μ‚¬κ°ν˜• λͺ¨μ–‘μœΌλ‘œ, κ²©μžμƒμ—μ„œ μ—°μ†λœ Xλ“€λ‘œ ν‘œν˜„λœλ‹€.
  • μ΄λ•Œ 곡(O)이 μƒμžμ˜ ν…Œλ‘λ¦¬ μ•ˆμͺ½μ— μžˆλŠ”μ§€ ν™•μΈν•΄μ„œ
    μƒμž 내뢀에 μžˆλ‹€λ©΄ "Y"λ₯Ό, κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ "N"을 좜λ ₯ν•΄μ•Ό ν•œλ‹€.

 

 


πŸ’‘ 아이디어

μ΄κ±°λŠ” λ‹€λ“€ μ–΄λ””μ„ κ°€ 많이 봀던 문제일 것 κ°™μ•„μ„œ 아이디어라고 적기도 μ• λ§€ν•˜μ§€λ§Œ ..πŸ˜…

κ·Έλž˜λ„ κ°„λ‹¨νžˆ 적어보면 μ•„λž˜μ™€ κ°™λ‹€.

 

  1. μƒμžμ˜ ν…Œλ‘λ¦¬ μ’Œν‘œ κ΅¬ν•˜κΈ°
    1) μ™Όμͺ½ μœ„ κΌ­μ§“μ μ˜ μ’Œν‘œλŠ” (r1, c1)
    2) 였λ₯Έμͺ½ μ•„λž˜ κΌ­μ§“μ μ˜ μ’Œν‘œλŠ” (r2, c2)
  2. 곡의 μœ„μΉ˜ ν™•μΈν•˜κΈ°
    곡의 μ’Œν‘œ (br, bc)κ°€ r1 < br < r2 그리고 c1 < bc < c2 λ²”μœ„ μ•ˆμ— λ“€μ–΄κ°€λ©΄ πŸ‘‰πŸ» μƒμž μ•ˆ
    κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ πŸ‘‰πŸ» μƒμž λ°–

 

 

이 그림처럼 κ²°κ΅­ μƒμžμ˜ μ™Όμͺ½ μœ„ μ’Œν‘œμ™€ 였λ₯Έμͺ½ μ•„λž˜ μ’Œν‘œλ§Œ κ΅¬ν•˜λ©΄,

μƒμž 내뢀에 μ‘΄μž¬ν•˜κΈ° μœ„ν•œ μ λ“€μ˜ xμ’Œν‘œμ™€ yμ’Œν‘œμ˜ λ²”μœ„λ₯Ό λ°”λ‘œ 확인할 수 μžˆλ‹€.

 

 


πŸ‘©πŸ»‍πŸ’» 전체 μ½”λ“œ

 

n, m = map(int, input().split())
s = [input().strip() for _ in range(n)]

r1 = n   # μ™Όμͺ½ μœ„μ˜ xμ’Œν‘œ
r2 = -1  # μ™Όμͺ½ μœ„μ˜ yμ’Œν‘œ
c1 = m   # 였λ₯Έμͺ½ μ•„λž˜μ˜ xμ’Œν‘œ
c2 = -1  # 였λ₯Έμͺ½ μœ„μ˜ yμ’Œν‘œ

ball_r = -1 # 곡의 xμ’Œν‘œ
ball_c = -1 # 곡의 yμ’Œν‘œ

for i in range(n):
	for j in range(m):
		cur = s[i][j]
		if cur == 'X':
			if i < r1: r1 = i
			if i > r2: r2 = i
			if j < c1: c1 = j
			if j > c2: c2 = j
		elif cur == 'O':
			ball_r, ball_c = i, j

# 곡이 μƒμž μ•ˆμ— μžˆλŠ”μ§€ νŒλ³„
print('Y' if ((r1 < ball_r < r2) and (c1 < ball_c < c2)) else 'N')

 

  • r1 = n 으둜 μ΄ˆκΈ°ν™”ν•œ μ΄μœ λŠ”,
    μƒμžμ˜ μ™Όμͺ½ μœ„ xμ’Œν‘œλŠ” κ²°κ΅­ κ°€μž₯ μž‘μ€ ν–‰ λ²ˆν˜Έμ—¬μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—
    μ²˜μŒμ—λŠ” μΆ©λΆ„νžˆ 큰 κ°’(n)으둜 두고, 더 μž‘μ€ 값이 λ‚˜μ˜€λ©΄ κ°±μ‹ ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.
  • r2 = -1 둜 μ΄ˆκΈ°ν™”ν•œ μ΄μœ λ„,
    μƒμžμ˜ 였λ₯Έμͺ½ μ•„λž˜ xμ’Œν‘œλŠ” κ°€μž₯ 큰 ν–‰ λ²ˆν˜Έμ—¬μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—
    μ²˜μœΌλ©©λŠ” μΆ©λΆ„νžˆ μž‘μ€ κ°’(-1)으둜 두고, 더 큰 값이 λ‚˜μ˜€λ©΄ κ°±μ‹ ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.
  • c1κ³Ό c2λ₯Ό 각각 μœ„μ™€ 같이 μ΄ˆκΈ°ν™” ν•œ μ΄μœ λ„ λ™μΌν•˜λ‹€.

 

 


πŸ“š κ²°λ‘ 

κ΅μˆ˜λ‹˜μ΄ 1μ°¨ μ½”ν…ŒλŠ” μ—„μ²­ μ–΄λ €μ›Œμ„œ ν†΅κ³Όν•˜λŠ” μ‚¬λžŒμ˜ 거의 없을 거라고 κ²μ£Όμ…¨λ˜ λ°”λžŒμ—

λ‚΄ μΉœκ΅¬λ“€ μ€‘μ—λŠ” 2μ°¨λΆ€ν„° μ°Έμ—¬ν•˜λ €κ³  1μ°¨λŠ” λ“€μ–΄μ˜€μ§€ μ•Šμ•˜λ˜ μΉœκ΅¬λ“€λ„ μžˆμ—ˆλŠ”λ°,

이런 문제일 쀄 μ•Œμ•˜μœΌλ©΄ μžκΈ°λ„ λ³Ό κ±Έ κ·Έλž¬λ‹€κ³  λ‹€λ“€ μ—„μ²­ μ•„μ‰¬μ›Œν–ˆλ‹€ γ…‹γ…‹

 

μ•„λ¬΄νŠΌ μ•žμœΌλ‘œλ„ 이런 격자 문제λ₯Ό ν’€ λ•Œ,

전체 μ˜μ—­μ„ 일일이 ν™•μΈν•˜κΈ° λ³΄λ‹€λŠ” 경계 μ’Œν‘œλ§Œ 기둝해도 λ˜λŠ”μ§€λ₯Ό λ– μ˜¬λ €μ„œ 확인해본닀면, 훨씬 κΉ”λ”ν•œ 풀이가 κ°€λŠ₯ν•  것이닀.

λ°˜μ‘ν˜•