๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2564)
<๊ฒฝ๋น์>
๋ฌธ์
๋๊ทผ์ด๋ ๋ฌด์ธ ๊ฒฝ๋น ํ์ฌ ๊ฒฝ๋น์์ผ๋ก ํญ์ ๋๊ธฐํ๊ณ ์๋ค๊ฐ ํธ์ถ์ด ๋ค์ด์ค๋ฉด ๊ฒฝ๋น ์ฐจ๋ฅผ ๋ชฐ๊ณ ๊ทธ๊ณณ์ผ๋ก ๋ฌ๋ ค๊ฐ์ผ ํ๋ค. ๋๊ทผ์ด๊ฐ ๋ด๋นํ๊ณ ์๋ ๊ณณ์ ์ง์ฌ๊ฐํ ๋ชจ์์ ๋ธ๋ก์ผ๋ก ๋ธ๋ก ์ค๊ฐ์ ๊ฐ๋ก์ง๋ฌ ์ฐจ๊ฐ ํต๊ณผํ ๋งํ ๊ธธ์ด ์๋ค. ์ด ๋ธ๋ก ๊ฒฝ๊ณ์ ๋ฌด์ธ ๊ฒฝ๋น๋ฅผ ์๋ขฐํ ์์ ๋ค์ด ์๋ค.
์๋ฅผ ๋ค์ด ๊ฐ๋ก์ ๊ธธ์ด๊ฐ 10, ์ธ๋ก์ ๊ธธ์ด๊ฐ 5์ธ ๋ธ๋ก์ ๊ฒฝ๊ณ์ ๋ฌด์ธ ๊ฒฝ๋น๋ฅผ ์๋ขฐํ 3๊ฐ์ ์์ ์ด ์๋ค๊ณ ํ์. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ด๋ค์ 1, 2, 3์ผ๋ก ํ์๋์ด ์๊ณ , ๋๊ทผ์ด๋ X๋ก ํ์ํ ์์น์ ์๋ค.
1๋ฒ ์์ ์์ ํธ์ถ์ด ๋ค์ด์์ ๋ ๋๊ทผ์ด๊ฐ ๋ธ๋ก์ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์ ์ด๋ํ๋ฉด ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ 12๊ฐ ๋๋ค. ๋ฐ๋ฉด ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋์ ์ด๋ํ๋ฉด ์ด๋ ๊ฑฐ๋ฆฌ๋ 18์ด ๋๋ค. ๋ฐ๋ผ์ ๋๊ทผ์ด๊ฐ 1๋ฒ ์์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 12๊ฐ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋๊ทผ์ด์ ์์น์์ 2๋ฒ ์์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 6, 3๋ฒ ์์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 5๊ฐ ๋๋ค.
๋ธ๋ก์ ํฌ๊ธฐ์ ์์ ์ ๊ฐ์ ๋ฐ ์์น ๊ทธ๋ฆฌ๊ณ ๋๊ทผ์ด์ ์์น๊ฐ ์ฃผ์ด์ง ๋ ๋๊ทผ์ด์ ์์น์ ๊ฐ ์์ ์ฌ์ด์ ์ต๋จ ๊ฑฐ๋ฆฌ์ ํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด์ ์ธ๋ก์ ๊ธธ์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ์์ ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๋ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด์ ์ธ๋ก์ ๊ธธ์ด, ์์ ์ ๊ฐ์๋ ๋ชจ๋ 100 ์ดํ์ ์์ฐ์์ด๋ค. ์ด์ด ํ ์ค์ ํ๋์ฉ ์์ ์ ์์น๊ฐ ์ฃผ์ด์ง๋ค. ์์ ์ ์์น๋ ๋ ๊ฐ์ ์์ฐ์๋ก ํ์๋๋ค. ์ฒซ์งธ ์๋ ์์ ์ด ์์นํ ๋ฐฉํฅ์ ๋ํ๋ด๋๋ฐ, 1์ ๋ธ๋ก์ ๋ถ์ชฝ, 2๋ ๋ธ๋ก์ ๋จ์ชฝ, 3์ ๋ธ๋ก์ ์์ชฝ, 4๋ ๋ธ๋ก์ ๋์ชฝ์ ์์ ์ด ์์์ ์๋ฏธํ๋ค. ๋์งธ ์๋ ์์ ์ด ๋ธ๋ก์ ๋ถ์ชฝ ๋๋ ๋จ์ชฝ์ ์์นํ ๊ฒฝ์ฐ ๋ธ๋ก์ ์ผ์ชฝ ๊ฒฝ๊ณ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๊ณ , ์์ ์ด ๋ธ๋ก์ ๋์ชฝ ๋๋ ์์ชฝ์ ์์นํ ๊ฒฝ์ฐ ๋ธ๋ก์ ์์ชฝ ๊ฒฝ๊ณ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ธ๋ค. ๋ง์ง๋ง ์ค์๋ ๋๊ทผ์ด์ ์์น๊ฐ ์์ ์ ์์น์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง๋ค. ์์ ์ ์์น๋ ๋๊ทผ์ด์ ์์น๋ ๋ธ๋ก์ ๊ผญ์ง์ ์ด ๋ ์ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋๊ทผ์ด์ ์์น์ ๊ฐ ์์ ์ฌ์ด์ ์ต๋จ ๊ฑฐ๋ฆฌ์ ํฉ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
def main():
m,n=map(int,sys.stdin.readline().split())
k=int(input())
arr=[]
for i in range(k+1):
a,d=map(int,sys.stdin.readline().split())
if a==1: # ๋ถ
arr.append([0,d])
elif a==2: # ๋จ
arr.append([n, d])
elif a==3: # ์
arr.append([d, 0])
else: # ๋
arr.append([d, m])
answer=0
val=arr[-1]
for i in range(k):
if arr[i][0]!=val[0] :
temp = val[0] - arr[i][0]
if temp < 0:
temp = -temp
if arr[i][1]+val[1]<m-arr[i][1]+m-val[1]:
temp+=(arr[i][1]+val[1])
else:
temp+=m-arr[i][1]+m-val[1]
else:
if arr[i][1]-val[1]==m or val[1]-arr[i][1]==m: # ๋, ์
temp = m
if arr[i][0] + val[0] < n - arr[i][0] + n - val[0]:
temp += (arr[i][0] + val[0])
else:
temp += n - arr[i][0] + n - val[0]
else: # ๊ฐ์ ์ค
temp=arr[i][1]-val[1]
if temp<0:
temp=-temp
answer+=temp
print(answer)
if __name__=='__main__':
main()
- ๊ฐ๋ก m, ์ธ๋ก n ์ ๋ ฅ
- ์์ ์ ๊ฐ์ k ์ ๋ ฅ
- k+1๊ฐ๋งํผ ์์ ๊ณผ ๋๊ทผ์ด์ ์์น ์
๋ ฅ
์ฒซ์งธ ์ a๊ฐ 1์ด๋ฉด ๋ถ์ชฝ -> x์ขํ 0, y์ขํ d
2์ด๋ฉด ๋จ์ชฝ -> x์ขํ n, y์ขํ d
3์ด๋ฉด ์์ชฝ -> x์ขํ d, y์ขํ 0
4์ด๋ฉด ๋์ชฝ -> x์ขํ d, y์ขํ m - ์ต๋จ ๊ฑฐ๋ฆฌ์ ํฉ answer ์ ์ธ
- arr์ ๋ง์ง๋ง ๊ฐ์ ๋๊ทผ์ด์ ์ขํ ์ด๋ฏ๋ก val์ ๋ฐ๋ก ์ ์ฅ
- arr์ ์ํํ๋ฉฐ
if x์ขํ๊ฐ ๊ฐ์ง ์์ผ๋ฉด ์ธ๋ก ๊ธธ์ด๋ฅผ ๊ตฌํด์ค -> ์๊ณ๋ฐฉํฅ ๋๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ๊ฐ ๋ ๊ฐ๋ก๊ธธ์ด๋ฅผ ๊ตฌํ์ฌ ๋ ์์ ๊ฐ์ ํํ์ฌ ๋ํด์ค
if x์ขํ๊ฐ ๊ฐ์ผ๋ฉด -> ๊ทธ์ค์์ y์ขํ๋ผ๋ฆฌ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๋ก๊ธธ์ด์ด๋ฉด ๋๊ณผ ์์ ์์นํ๋ค๋ ๋ป์ด๋ฏ๋ก ๊ฐ๋ก๊ธธ์ด๋ฅผ ๋ํด์ฃผ์ด์ผ ํ๋ฉฐ, ์์ ๋๊ฐ์ด ์๊ณ๋ฐฉํฅ ๋๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ๊ฐ ๋ ์ธ๋ก ๊ธธ์ด๋ฅผ ๊ตฌํ์ฌ ๋ ์์ ๊ฐ์ ํํ์ฌ ๋ํด์ค
but y์ขํ๋ผ๋ฆฌ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๋ก๊ธธ์ด๊ฐ ์๋๋ผ๋ฉด ๊ฐ์ ๋ผ์ธ์ ์์นํ๋ค๋ ๋ป์ด๋ฏ๋ก ๊ทธ๋ฅ ๊ฐ๋ก๊ธธ์ด๋ง ๊ตฌํด์ค
= ์์์ ๊ตฌํ ๊ฐ์ answer์ ๋ํด์ค - answer ์ถ๋ ฅ
โ ์ ํ๋ ธ๋๊ฐ?
x์ขํ๊ฐ ๊ฐ์ ๋, ๋๊ณผ ์์ ์์นํ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด์๋ค.
์๊ฐ๐ค
.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1715_์นด๋ ์ ๋ ฌํ๊ธฐ (0) | 2022.08.06 |
---|---|
[Baekjoon] 15649, 15650, 15651, 15652 N๊ณผ M (0) | 2022.08.03 |
[Baekjoon] 3184_์ (0) | 2022.06.02 |
[Baekjoon] 14500_ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.05.31 |
[Baekjoon] 21608_์์ด ์ด๋ฑํ๊ต (0) | 2022.05.27 |