๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON C++] 23291_์ดํญ ์ ๋ฆฌ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๐ ๋ฌธ์
๋ง๋ฒ์ฌ ์์ด๋ ๊ทธ๋์ ๋ฐฐ์ด ๋ง๋ฒ์ ์ด์ฉํด ์ดํญ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
์ดํญ์ ์ ์ก๋ฉด์ฒด ๋ชจ์์ด๊ณ , ํ ๋ณ์ ๊ธธ์ด๋ ๋ชจ๋ 1์ด๋ค.
์์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ดํญ์ N๊ฐ์ด๊ณ , ๊ฐ์ฅ ์ฒ์์ ์ดํญ์ ์ผ๋ ฌ๋ก ๋ฐ๋ฅ ์์ ๋์ฌ์ ธ ์๋ค.
์ดํญ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ ๋ง๋ฆฌ ์ด์ ๋ค์ด์๋ค.
<๊ทธ๋ฆผ 1>์ ์ดํญ 8๊ฐ๊ฐ ๋ฐ๋ฅ ์์ ๋์ฌ์๋ ์ํ์ด๋ฉฐ,
์นธ์ ์ ํ ๊ฐ์ ๊ทธ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์์ด๋ค. ํธ์์ ์ดํญ์ ์ ์ฌ๊ฐํ์ผ๋ก ํํํ๋ค.
=> 5, 2, 3, 14, 9, 2, 11, 8
์ดํญ์ ํ ๋ฒ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
๋จผ์ , ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ๋ง๋ฆฌ ๋ฃ๋๋ค.
๋ง์ฝ, ๊ทธ๋ฌํ ์ดํญ์ด ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ์ต์์ธ ์ดํญ ๋ชจ๋์ ํ ๋ง๋ฆฌ์ฉ ๋ฃ๋๋ค.
์์ ์์์ ๊ฒฝ์ฐ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 2๋ง๋ฆฌ ์๊ณ , ๊ทธ๋ฌํ ์ดํญ์ 2๊ฐ๊ฐ ์๋ค.
๋ฐ๋ผ์, 2๊ฐ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ๋ง๋ฆฌ์ฉ ๋ฃ์ด <๊ทธ๋ฆผ 2>์ ๊ฐ์์ง๋ค.
=> 5, 3, 3, 14, 9, 3, 11, 8
์ด์ ์ดํญ์ ์๋๋ค. ๋จผ์ , ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ์ ๊ทธ ์ดํญ์ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์์ ์ฌ๋ ค ๋์ <๊ทธ๋ฆผ 3>์ด ๋๋ค.
=> 5,
=> 3, 3, 14, 9, 3, 11, 8
์ด์ , 2๊ฐ ์ด์ ์์ฌ์๋ ์ดํญ์ ๋ชจ๋ ๊ณต์ค ๋ถ์์ํจ ๋ค์, ์ ์ฒด๋ฅผ ์๊ณ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ๋ค.
์ดํ ๊ณต์ค ๋ถ์์ํจ ์ดํญ์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ ์์ ์ฌ๋ ค๋๋๋ค.
=> 3, 5,
=> 3, 14, 9, 3, 11, 8
๋ฐ๋ฅ์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ ์์ ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ์ด ์์ด์ผ ํ๋ค.
์ด ์์ ์ ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์๋์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ด ์์๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋จผ์ , <๊ทธ๋ฆผ 4>์ ๊ฐ์ด ์ดํญ์ด ๋์ธ ์ํ๊ฐ ๋ณํ๊ณ , ํ ๋ฒ ๋ ๋ณํด์ <๊ทธ๋ฆผ 5>๊ฐ ๋๋ค.
=> 3, 3,
=> 14, 5,
=> 9, 3, 11, 8
<๊ทธ๋ฆผ 5>์์ ํ ๋ฒ ๋ ์ดํญ์ ๊ณต์ค ๋ถ์์ํค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ ์ด์ ๋ <๊ทธ๋ฆผ 6>๊ณผ ๊ฐ์ด ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์๋์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
=> 9, 14, 3
=> 3, 5, 3
=> 11, 8
๊ณต์ค ๋ถ์ ์์ ์ด ๋ชจ๋ ๋๋๋ฉด, ์ดํญ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๋ฅผ ์กฐ์ ํ๋ค.
๋ชจ๋ ์ธ์ ํ ๋ ์ดํญ์ ๋ํด์, ๋ฌผ๊ณ ๊ธฐ ์์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค.
์ด ์ฐจ์ด๋ฅผ 5๋ก ๋๋ ๋ชซ์ d๋ผ๊ณ ํ์. d๊ฐ 0๋ณด๋ค ํฌ๋ฉด, ๋ ์ดํญ ์ค ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๋ง์ ๊ณณ์ ์๋ ๋ฌผ๊ณ ๊ธฐ d ๋ง๋ฆฌ๋ฅผ ์ ์ ๊ณณ์ ์๋ ๊ณณ์ผ๋ก ๋ณด๋ธ๋ค.
์ด ๊ณผ์ ์ ๋ชจ๋ ์ธ์ ํ ์นธ์ ๋ํด์ ๋์์ ๋ฐ์ํ๋ค. ์ด ๊ณผ์ ์ด ์๋ฃ๋๋ฉด <๊ทธ๋ฆผ 7>์ด ๋๋ค.
=> 5, 3
=> 10, 6
=> 9, 5, 10, 8
์ด์ ๋ค์ ์ดํญ์ ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋์์ผ ํ๋ค. ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ๋ถํฐ, ๊ทธ๋ฆฌ๊ณ ์๋์ ์๋ ์ดํญ๋ถํฐ ๊ฐ์ฅ ์์ ์๋ ์ดํญ๊น์ง ์์๋๋ก ๋ฐ๋ฅ์ ๋์์ผ ํ๋ค.
<๊ทธ๋ฆผ 8>์ด ๋ฐ๋ฅ์ ๋ค์ ์ผ๋ ฌ๋ก ๋์ ์ํ์ด๋ค.
=> 9, 10, 5, 5, 6, 3, 10, 8
๋ค์ ๊ณต์ค ๋ถ์ ์์ ์ ํด์ผ ํ๋ค. ์ด๋ฒ์๋ ๊ฐ์ด๋ฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ผ์ชฝ N/2๊ฐ๋ฅผ ๊ณต์ค ๋ถ์์์ผ ์ ์ฒด๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก 180๋ ํ์ ์ํจ ๋ค์,
์ค๋ฅธ์ชฝ N/2๊ฐ์ ์์ ๋์์ผ ํ๋ค. ์ด ์์ ์ ๋ ๋ฒ ๋ฐ๋ณตํด์ผํ๋ค.
๋ ๋ฒ ๋ฐ๋ณตํ๋ฉด ๋ฐ๋ฅ์ ์๋ ์ดํญ์ ์๋ N/4๊ฐ๊ฐ ๋๋ค.
<๊ทธ๋ฆผ 9>๋ ์ด ์์ ์ 1๋ฒ ํ์ ๋, <๊ทธ๋ฆผ 10>์ ๋ค์ ํ ๋ฒ ๋ ํ์ ๋์ด๋ค.
์ฌ๊ธฐ์ ๋ค์ ์์์ ํ ๋ฌผ๊ณ ๊ธฐ ์กฐ์ ์์ ์ ์ํํ๊ณ , ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋๋ ์์ ์ ์ํํ๋ค. <๊ทธ๋ฆผ 10>์์ ์กฐ์ ์์ ์ ๋ง์น ๊ฒฐ๊ณผ๋ <๊ทธ๋ฆผ 11>์ด ๋๊ณ ,
์ฌ๊ธฐ์ ๋ค์ ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋๋ ์์ ์ ์ํํ๋ฉด <๊ทธ๋ฆผ 12>๊ฐ ๋๋ค.
์ดํญ์ ์ N, ๊ฐ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์๋ ์ดํญ๊ณผ ๊ฐ์ฅ ์ ๊ฒ ๋ค์ด์๋ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ์ ์ฐจ์ด๊ฐ K ์ดํ๊ฐ ๋๋ ค๋ฉด ์ดํญ์ ๋ช ๋ฒ ์ ๋ฆฌํด์ผํ๋์ง ๊ตฌํด๋ณด์.
๐ ์ ๋ ฅ
์ฒซ์งธ ์ค์ N, K๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ์๋ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ๋ถํฐ ์์๋๋ก ์ฃผ์ด์ง๋ค.
๐ ์ถ๋ ฅ
๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์๋ ์ดํญ๊ณผ ๊ฐ์ฅ ์ ๊ฒ ๋ค์ด์๋ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ์ ์ฐจ์ด๊ฐ K ์ดํ๊ฐ ๋๋ ค๋ฉด
์ดํญ์ ๋ช ๋ฒ ์ ๋ฆฌํด์ผํ๋์ง ์ถ๋ ฅํ๋ค.
"""
[23291] ์ดํญ ์ ๋ฆฌ
๐ ๋ฌธ์
๋ง๋ฒ์ฌ ์์ด๋ ๊ทธ๋์ ๋ฐฐ์ด ๋ง๋ฒ์ ์ด์ฉํด ์ดํญ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
์ดํญ์ ์ ์ก๋ฉด์ฒด ๋ชจ์์ด๊ณ , ํ ๋ณ์ ๊ธธ์ด๋ ๋ชจ๋ 1์ด๋ค.
์์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ดํญ์ N๊ฐ์ด๊ณ , ๊ฐ์ฅ ์ฒ์์ ์ดํญ์ ์ผ๋ ฌ๋ก ๋ฐ๋ฅ ์์ ๋์ฌ์ ธ ์๋ค.
์ดํญ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ ๋ง๋ฆฌ ์ด์ ๋ค์ด์๋ค.
<๊ทธ๋ฆผ 1>์ ์ดํญ 8๊ฐ๊ฐ ๋ฐ๋ฅ ์์ ๋์ฌ์๋ ์ํ์ด๋ฉฐ,
์นธ์ ์ ํ ๊ฐ์ ๊ทธ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์์ด๋ค. ํธ์์ ์ดํญ์ ์ ์ฌ๊ฐํ์ผ๋ก ํํํ๋ค.
=> 5, 2, 3, 14, 9, 2, 11, 8
์ดํญ์ ํ ๋ฒ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
๋จผ์ , ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ๋ง๋ฆฌ ๋ฃ๋๋ค.
๋ง์ฝ, ๊ทธ๋ฌํ ์ดํญ์ด ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ์ต์์ธ ์ดํญ ๋ชจ๋์ ํ ๋ง๋ฆฌ์ฉ ๋ฃ๋๋ค.
์์ ์์์ ๊ฒฝ์ฐ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 2๋ง๋ฆฌ ์๊ณ , ๊ทธ๋ฌํ ์ดํญ์ 2๊ฐ๊ฐ ์๋ค.
๋ฐ๋ผ์, 2๊ฐ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ๋ง๋ฆฌ์ฉ ๋ฃ์ด <๊ทธ๋ฆผ 2>์ ๊ฐ์์ง๋ค.
=> 5, 3, 3, 14, 9, 3, 11, 8
์ด์ ์ดํญ์ ์๋๋ค. ๋จผ์ , ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ์ ๊ทธ ์ดํญ์ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์์ ์ฌ๋ ค ๋์ <๊ทธ๋ฆผ 3>์ด ๋๋ค.
=> 5,
=> 3, 3, 14, 9, 3, 11, 8
์ด์ , 2๊ฐ ์ด์ ์์ฌ์๋ ์ดํญ์ ๋ชจ๋ ๊ณต์ค ๋ถ์์ํจ ๋ค์, ์ ์ฒด๋ฅผ ์๊ณ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ๋ค.
์ดํ ๊ณต์ค ๋ถ์์ํจ ์ดํญ์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ ์์ ์ฌ๋ ค๋๋๋ค.
=> 3, 5,
=> 3, 14, 9, 3, 11, 8
๋ฐ๋ฅ์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ ์์ ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ์ด ์์ด์ผ ํ๋ค.
์ด ์์
์ ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์๋์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ด ์์๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋จผ์ , <๊ทธ๋ฆผ 4>์ ๊ฐ์ด ์ดํญ์ด ๋์ธ ์ํ๊ฐ ๋ณํ๊ณ , ํ ๋ฒ ๋ ๋ณํด์ <๊ทธ๋ฆผ 5>๊ฐ ๋๋ค.
=> 3, 3,
=> 14, 5,
=> 9, 3, 11, 8
<๊ทธ๋ฆผ 5>์์ ํ ๋ฒ ๋ ์ดํญ์ ๊ณต์ค ๋ถ์์ํค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ ์ด์ ๋ <๊ทธ๋ฆผ 6>๊ณผ ๊ฐ์ด ๊ณต์ค ๋ถ์์ํจ ์ดํญ ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์ดํญ์ ์๋์ ๋ฐ๋ฅ์ ์๋ ์ดํญ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
=> 9, 14, 3
=> 3, 5, 3
=> 11, 8
๊ณต์ค ๋ถ์ ์์
์ด ๋ชจ๋ ๋๋๋ฉด, ์ดํญ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๋ฅผ ์กฐ์ ํ๋ค.
๋ชจ๋ ์ธ์ ํ ๋ ์ดํญ์ ๋ํด์, ๋ฌผ๊ณ ๊ธฐ ์์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค.
์ด ์ฐจ์ด๋ฅผ 5๋ก ๋๋ ๋ชซ์ d๋ผ๊ณ ํ์. d๊ฐ 0๋ณด๋ค ํฌ๋ฉด, ๋ ์ดํญ ์ค ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๋ง์ ๊ณณ์ ์๋ ๋ฌผ๊ณ ๊ธฐ d ๋ง๋ฆฌ๋ฅผ ์ ์ ๊ณณ์ ์๋ ๊ณณ์ผ๋ก ๋ณด๋ธ๋ค.
์ด ๊ณผ์ ์ ๋ชจ๋ ์ธ์ ํ ์นธ์ ๋ํด์ ๋์์ ๋ฐ์ํ๋ค. ์ด ๊ณผ์ ์ด ์๋ฃ๋๋ฉด <๊ทธ๋ฆผ 7>์ด ๋๋ค.
=> 5, 3
=> 10, 6
=> 9, 5, 10, 8
์ด์ ๋ค์ ์ดํญ์ ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋์์ผ ํ๋ค. ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ๋ถํฐ, ๊ทธ๋ฆฌ๊ณ ์๋์ ์๋ ์ดํญ๋ถํฐ ๊ฐ์ฅ ์์ ์๋ ์ดํญ๊น์ง ์์๋๋ก ๋ฐ๋ฅ์ ๋์์ผ ํ๋ค.
<๊ทธ๋ฆผ 8>์ด ๋ฐ๋ฅ์ ๋ค์ ์ผ๋ ฌ๋ก ๋์ ์ํ์ด๋ค.
=> 9, 10, 5, 5, 6, 3, 10, 8
๋ค์ ๊ณต์ค ๋ถ์ ์์
์ ํด์ผ ํ๋ค. ์ด๋ฒ์๋ ๊ฐ์ด๋ฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ผ์ชฝ N/2๊ฐ๋ฅผ ๊ณต์ค ๋ถ์์์ผ ์ ์ฒด๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก 180๋ ํ์ ์ํจ ๋ค์,
์ค๋ฅธ์ชฝ N/2๊ฐ์ ์์ ๋์์ผ ํ๋ค. ์ด ์์
์ ๋ ๋ฒ ๋ฐ๋ณตํด์ผํ๋ค.
๋ ๋ฒ ๋ฐ๋ณตํ๋ฉด ๋ฐ๋ฅ์ ์๋ ์ดํญ์ ์๋ N/4๊ฐ๊ฐ ๋๋ค.
<๊ทธ๋ฆผ 9>๋ ์ด ์์
์ 1๋ฒ ํ์ ๋, <๊ทธ๋ฆผ 10>์ ๋ค์ ํ ๋ฒ ๋ ํ์ ๋์ด๋ค.
์ฌ๊ธฐ์ ๋ค์ ์์์ ํ ๋ฌผ๊ณ ๊ธฐ ์กฐ์ ์์
์ ์ํํ๊ณ , ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋๋ ์์
์ ์ํํ๋ค. <๊ทธ๋ฆผ 10>์์ ์กฐ์ ์์
์ ๋ง์น ๊ฒฐ๊ณผ๋ <๊ทธ๋ฆผ 11>์ด ๋๊ณ ,
์ฌ๊ธฐ์ ๋ค์ ๋ฐ๋ฅ์ ์ผ๋ ฌ๋ก ๋๋ ์์
์ ์ํํ๋ฉด <๊ทธ๋ฆผ 12>๊ฐ ๋๋ค.
์ดํญ์ ์ N, ๊ฐ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์๋ ์ดํญ๊ณผ ๊ฐ์ฅ ์ ๊ฒ ๋ค์ด์๋ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ์ ์ฐจ์ด๊ฐ K ์ดํ๊ฐ ๋๋ ค๋ฉด ์ดํญ์ ๋ช ๋ฒ ์ ๋ฆฌํด์ผํ๋์ง ๊ตฌํด๋ณด์.
๐ ์
๋ ฅ
์ฒซ์งธ ์ค์ N, K๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ์๋ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์ดํญ๋ถํฐ ์์๋๋ก ์ฃผ์ด์ง๋ค.
๐ ์ถ๋ ฅ
๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์๋ ์ดํญ๊ณผ ๊ฐ์ฅ ์ ๊ฒ ๋ค์ด์๋ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ์ ์ฐจ์ด๊ฐ K ์ดํ๊ฐ ๋๋ ค๋ฉด
์ดํญ์ ๋ช ๋ฒ ์ ๋ฆฌํด์ผํ๋์ง ์ถ๋ ฅํ๋ค.
"""
from collections import deque
import sys
# ์ดํญ์ ์ N, ๊ฐ ์ดํญ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์ K
n, k = map(int, sys.stdin.readline().split())
direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]
board = list()
# [deque([5, 2, 3, 14, 9, 2, 11, 8])]
board.append(deque(list(map(int, sys.stdin.readline().split()))))
# ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ํ ๋ง๋ฆฌ ๋ฃ๊ธฐ
def push_fish(graph) :
min_bowl_fish_num = min(graph[0])
for i in range(len(graph[0])):
if graph[0][i] == min_bowl_fish_num:
# ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ์ ์ ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ ๋ง๋ฆฌ ๋ฃ๋๋ค
graph[0][i] += 1
# ๊ฐ์ฅ ์ผ์ชฝ์ ์ดํญ์ ์์ ์๊ธฐ
def popleft_stack(graph) :
pop = graph[0].popleft()
graph.append(deque([pop]))
# ๊ณต์ค์ ๋ฌ ์ดํญ๋ค ์๊ณ๋ฐฉํฅ 90๋ ํ์
def rotate_90_clock(bowls) :
new_bowls = [[0] * len(bowls) for _ in range(len(bowls[0]))]
for i in range(len(bowls[0])):
for j in range(len(bowls)):
new_bowls[i][j] = bowls[j][len(bowls[0])-1-i]
return new_bowls
# 2๊ฐ ์ด์ ์์ธ ์ดํญ๋ค ๋ถ๋ฆฌํด์ ๊ณต์ค๋ถ์
def fly_bowls(graph) :
while True :
if len(graph) > len(graph[0]) - len(graph[-1]) :
break
will_fly = []
will_fly_row = len(graph)
will_fly_col = len(graph[-1])
for i in range(will_fly_row) :
new_deque = deque()
for _ in range(will_fly_col) :
new_deque.append(graph[i].popleft())
will_fly.append(new_deque)
graph = [graph[0]]
rotated_bowls = rotate_90_clock(will_fly)
for r in rotated_bowls :
graph.append(deque(r))
return graph
# ์ดํญ์ ๋ฌผ๊ณ ๊ธฐ ์ ์กฐ์
def fix_fish_num (graph) :
dp = [[0] * len(graph[x]) for x in range(len(graph))]
for x in range(len(graph)) :
for y in range(len(graph[x])) :
for d in direction :
nx = x + d[0]
ny = y + d[1]
# ๋ชจ๋ ์ธ์ ํ ๋ ์ดํญ์ ๋ํด์, ๋ฌผ๊ณ ๊ธฐ ์์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค.
# ์ด ์ฐจ์ด๋ฅผ 5๋ก ๋๋ ๋ชซ์ d
# d๊ฐ 0๋ณด๋ค ํฌ๋ฉด, ๋ ์ดํญ ์ค ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๋ง์ ๊ณณ์ ์๋ ๋ฌผ๊ณ ๊ธฐ d ๋ง๋ฆฌ๋ฅผ ์ ์ ๊ณณ์ ์๋ ๊ณณ์ผ๋ก ๋ณด๋ธ๋ค.
# ์ด ๊ณผ์ ์ ๋ชจ๋ ์ธ์ ํ ์นธ์ ๋ํด์ ๋์์ ๋ฐ์
if 0 <= nx < len(graph) and 0 <= ny < len(graph[nx]) :
# ํ์ฌ ์นธ์ด ๋ ํฌ๋ค๋ฉด
if graph[x][y] > graph[nx][ny]:
d = (graph[x][y] - graph[nx][ny]) // 5
if d >= 1:
dp[x][y] -= d
else:
d = (graph[nx][ny] - graph[x][y]) // 5
if d >= 1:
dp[x][y] += d
for i in range(len(graph)):
for j in range(len(graph[i])):
graph[i][j] += dp[i][j]
# ์ดํญ ์ผ๋ ฌ๋ก ๋๊ธฐ
def bowl_row (graph) :
new_graph = deque()
for i in range(len(graph[-1])):
for j in range(len(graph)):
new_graph.append(graph[j][i])
for i in range(len(graph[-1]), len(graph[0])):
new_graph.append(graph[0][i])
result_list = list()
result_list.append(new_graph)
return result_list
# 180๋ ํ์
def rotate_180 (graph) :
new_graph = []
for i in reversed(range(len(graph))):
graph[i].reverse()
new_graph.append(graph[i])
return new_graph
# ๋ค์ ๊ณต์ค๋ถ์ (์ ๋ฐ ์๋ฅด๋๋ฐ 2๋ฒ ํ๊ธฐ)
def fly_bowls2 (graph) :
left1 = list()
left2 = list()
new_deque1 = deque()
for i in range(n//2):
new_deque1.append(graph[0].popleft())
left1.append(new_deque1)
rotated_left1 = rotate_180(left1)
graph += rotated_left1
for i in range(2):
temp_deque = deque()
for j in range(n//4):
temp_deque.append(graph[i].popleft())
left2.append(temp_deque)
rotated_left2 = rotate_180(left2)
graph += rotated_left2
# ๋ฌผ๊ณ ๊ธฐ ๊ฐ์ฅ ๋ง์ ์ดํญ๊ณผ ๊ฐ์ฅ ์ ์ ์ดํญ์ ์ฐจ์ด
def get_result(graph):
dq = graph[0]
result1 = max(dq) - min(dq)
return result1
answer = 0
while True :
result = get_result(board)
if result <= k :
print(answer)
break
push_fish(board)
popleft_stack(board)
board = fly_bowls(board)
fix_fish_num(board)
board = bowl_row(board)
fly_bowls2(board)
fix_fish_num(board)
board = bowl_row(board)
answer += 1

728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON C++] 14501_ํด์ฌ (0) | 2023.08.19 |
---|---|
[BAEKJOON C++] 13458_์ํ ๊ฐ๋ (0) | 2023.08.19 |
[BAEKJOON C++] 10773_์ ๋ก (0) | 2023.08.17 |
[BAEKJOON C++] 5800_์ฑ์ ํต๊ณ (0) | 2023.08.17 |
[BAEKJOON C++] 11655_ROT13 (0) | 2023.08.17 |