๋ฌธ์
https://www.acmicpc.net/problem/1094
์ค๋ช
์ด๋ฌธ์ ๋ ์ดํด๋ง ํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ง๋๊ฒ ์์ฒด๋ ์ด๋ ต์ง ์์๋๋ฐ ๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ๋ง ๊ฑฐ์ ๋ฌธ์ ํ์ด ์๊ฐ์ 90 ํผ์ผํธ๊ฐ ์์ํ๋ค. ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ดํดํด ๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ์๋ฅผ๋ค์ด ๋ด๊ฐ ์๋ฅธ ๋ง๋๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์ด์ด ๋ถํ 23CM ์ ๋ง๋๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค๊ณ ์น์. ๋จผ์ ์ฒ์๊ฐ์ง๊ณ ์๋ ๋ง๋์ ๊ธธ์ด๋ 64CM ์ด๊ณ ์ด๊ฒ์ ๋ฐ์ผ๋ก ๊ฐ๋ฅด๋ฉด ๋๊ฐ์ 32CM ๋ง๋๊ฐ ๋์จ๋ค. ์ด์ค ํ๋์ ๋ง๋ 32CM ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ง๋์ ๊ธธ์ด 23CM ๋ ๋น๊ตํ์๋ 32CM ๊ฐ ๋ ๊ธธ๊ธฐ๋๋ฌธ์ ์๋ฅธ๋ง๋์ค ํ๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋ค์ ์ ๊ณผ์ ์ ์ฐ๋ฆฌ๊ฐ ๋ฐ์ผ๋ก ๊ฐ๋ฅธ ๋ง๋์ค ํ๋์ ๊ธธ์ด๊ฐ ์ฐ๋ฆฌ๊ฐ ๋ชฉํํ๋ ๋ง๋์ ๊ธธ์ด๋ณด๋ค ์งง์์ง๋๊น์ง ๋ฐ๋ณตํ๋ค. ์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ์๋ 16CM ์์ ์ด ๋ฐ๋ณต์ ์ค๋จํ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด 16CM ๋ง๋ 2 ๊ฐ๊ฐ ๋จ๊ฒ ๋๋๋ฐ ์ด์ค ํ๋์ ๋ง๋๋ ๊ณ์ ์ชผ๊ฐ๋ฉด 16, 8 , 4 , 2, 1 โฆ ๋ก ์ชผ๊ฐ์ง๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ์ด ๋ง๋๋ค์ ์ด์ด์ 23CM ๋ฅผ ๋ง๋๋ ค๋ฉด 16CM, 4CM, 2CM, 1CM ์ ๋ง๋๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ ์ต์ข ์ ์ผ๋ก 4 ๊ฐ์ ๋ง๋๊ฐ ์กด์ฌํด์ผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ธธ์ด๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๊ฒ ๋์ด 23 ์ ๋ฃ์์๋ 4 ๊ฐ ๋์ค๋๋ก ํ๋ ์์ค๋ฅผ ์ง๋ฉด ์ ๋ต์ด๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฒซ๋ฒ์งธ ๊ณผ์ , 16CM ๊น์ง ๋ง๋๋ฅผ ๋ฐ์ผ๋ก ๊ฐ๋ฅด๋ ๋ถ๋ถ๊น์ง๋ ์ด๋ ต์ง ์์ง๋ง ๊ทธ ์ดํ๋ถํฐ๋ ์กฐํฉ์ ์ด๋ป๊ฒ ํด์ผ ์ฐ๋ฆฌ๊ฐ ๋ชฉํํ๋ ๊ธธ์ด๋ฅผ ๋ง์ถ ์ ์๋์ง ๊ณ ๋ฏผํด์ผํ๋ค. ์ฒ์์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ for๋ฌธ, ์ฆ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ํด๊ฒฐํด ๋ณด๋ ค๊ณ ํ์ง๋ง ๊ทธ๊ฑด ๋๋ฌด ํ๋์ฝ๋ฉ, ์ฆ ๋นํจ์จ์ ์ผ๋ก ํ๋จํ์ฌ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชจ์ํ๋ ๋์ค ๋ชฉํํ๋ ๊ธธ์ด ๊ฐ์์ ์ฐ๋ฆฌ๊ฐ ์๋ฅธ ๋ง๋์ ๊ธธ์ด๋ฅผ ์ฐจ๋ก์ฐจ๋ก ๋นผ๋ฉด ์ต์ข ์ ์ผ๋ก ๋ช๊ฐ์ ๋ง๋๊ฐ ํ์ํ์ง ์ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.์๋ฅผ๋ค์ด ์ฐ๋ฆฌ๊ฐ 23CM ์ ๊ธธ์ด๋ฅผ ๋ง๋๋๋ฐ ์กฐํฉํ ์ ์๋ ๋ง๋๋ ์ ์์์์ ๋ณผ ์ ์๋ฏ์ด 16, 8, 4, 2, 1CM(1CM ๋ง๋๋ ๋๊ฐ)๊ฐ ๋๋๋ฐ ์์์ ๋งํ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ฉด 23CM ์์ 16CM ๋ง๋์ ๊ธธ์ด๋ฅผ ๋นผ๋ฉด 7CM ๊ฐ ๋๊ณ 8CM ๋ 7CM ๋ณด๋ค ํฌ๋ฏ๋ก ๋๊ธฐ๊ณ ๋๋จธ์ง ์ฐจ๋ก๋๋ก 4, 2, 1CM ๊ธธ์ด์ ๋ง๋๋ฅผ ๋บด๋ฉด ์ต์ข ์ ์ผ๋ก 23CM ๊ธธ์ด์ ๋ง๋๋ฅผ ๋ง๋ค ์ ์๊ณ ์ด 4 ๊ฐ์ ๋ง๋๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ฝ๋
#include <stdio.h>
int main() {
int goal_len,start_len = 64,pole_ea=1; // ๋ชฉํ๊ธธ์ด / ์์๊ธธ์ด = 64 / ์ด์ด๋ถํ ๋ง๋ ๊ฐฏ์
scanf("%d",&goal_len);
while(start_len > goal_len) //๋ฐ๊ฐ์ค ํ๋๊ฐ ํ๋ฝํ์ง ์์๋๊น์ง ๋ฐ๋ณต
start_len /= 2;
goal_len -= start_len; //๋์ด์ ํ๊ฐ๊ฐ ํ๋ฝ๋ ์ผ์ด ์์ผ๋ฏ๋ก ์์ผ๋ก ์๋ ค์ง๋ ๋ง๋๊ธฐ๋ฅผ ์ด์ด๋ถ์ด๊ธฐ ์ํด ์ ์ผ ํฐ ๊ธธ์ด์ ๋ง๋์ ๊ธธ์ด๋ฅผ ๋บ๋ค.
while(goal_len != 0) //๋๋จธ์ง ๋ง๋๋ฅผ ๋ฌดํ์ ์๋ผ ๊ธธ์ด๋ฅผ ๋นผ์ ์ต์ข
์ ์ผ๋ก ์ด์ด๋ถํ ๊ธธ์ด์ ๋ชฉํ๊ธธ์ด๊ฐ ๊ฐ์์ง๋๊น์ง ๋ฐ๋ณตํ๋ค.
{
start_len /= 2;
if(goal_len >= start_len)
{
goal_len -= start_len;
pole_ea++;
}
}
printf("%d\n",pole_ea);
return 0;
}