Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 1057๋ฒˆ - ํ† ๋„ˆ๋จผํŠธ (C++)

moaoh 2023. 7. 9. 23:44

๋ฌธ์ œ

๊น€์ง€๋ฏผ์€ N๋ช…์ด ์ฐธ๊ฐ€ํ•˜๋Š” ์Šคํƒ€ ํ† ๋„ˆ๋จผํŠธ์— ์ง„์ถœํ–ˆ๋‹ค. ํ† ๋„ˆ๋จผํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค. ์ผ๋‹จ N๋ช…์˜ ์ฐธ๊ฐ€์ž๋Š” ๋ฒˆํ˜ธ๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์„œ๋กœ ์ธ์ ‘ํ•œ ๋ฒˆํ˜ธ๋ผ๋ฆฌ ์Šคํƒ€๋ฅผ ํ•œ๋‹ค. ์ด๊ธด ์‚ฌ๋žŒ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์— ์ง„์ถœํ•˜๊ณ , ์ง„ ์‚ฌ๋žŒ์€ ๊ทธ ๋ผ์šด๋“œ์—์„œ ๋–จ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๊ทธ ๋ผ์šด๋“œ์˜ ์ฐธ๊ฐ€์ž๊ฐ€ ํ™€์ˆ˜๋ช…์ด๋ผ๋ฉด, ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์ฐธ๊ฐ€์ž๋Š” ๋‹ค์Œ ๋ผ์šด๋“œ๋กœ ์ž๋™ ์ง„์ถœํ•œ๋‹ค. ๋‹ค์Œ ๋ผ์šด๋“œ์—์„  ๋‹ค์‹œ ์ฐธ๊ฐ€์ž์˜ ๋ฒˆํ˜ธ๋ฅผ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค. ์ด๋•Œ, ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธฐ๋Š” ์ˆœ์„œ๋Š” ์ฒ˜์Œ ๋ฒˆํ˜ธ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค. ์ด ๋ง์€ 1๋ฒˆ๊ณผ 2๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 1๋ฒˆ์ด ์ง„์ถœํ•˜๊ณ , 3๋ฒˆ๊ณผ 4๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 4๋ฒˆ์ด ์ง„์ถœํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์—์„œ ๋ฒˆํ˜ธ 2๋ฒˆ์„ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค. ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ฐฐ์ •๋ฐ›์€ ํ›„์— ํ•œ ๋ช…๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ผ์šด๋“œ๋ฅผ ๊ณ„์† ํ•œ๋‹ค.

๋งˆ์นจ ์ด ์Šคํƒ€ ๋Œ€ํšŒ์— ์ž„ํ•œ์ˆ˜๋„ ์ฐธ๊ฐ€ํ–ˆ๋‹ค. ๊น€์ง€๋ฏผ์€ ๊ฐ‘์ž๊ธฐ ์Šคํƒ€ ๋Œ€ํšŒ์—์„œ ์šฐ์Šนํ•˜๋Š” ์š•์‹ฌ์€ ์—†์–ด์ง€๊ณ , ๋ช‡ ๋ผ์šด๋“œ์—์„œ ์ž„ํ•œ์ˆ˜์™€ ๋Œ€๊ฒฐํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ์ผ๋‹จ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๋Š” ์„œ๋กœ ๋Œ€๊ฒฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ํ•ญ์ƒ ์ด๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. 1 ๋ผ์šด๋“œ์—์„œ ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ณผ์—ฐ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๊ฐ€ ๋ช‡ ๋ผ์šด๋“œ์—์„œ ๋Œ€๊ฒฐํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ฐธ๊ฐ€์ž์˜ ์ˆ˜ N๊ณผ 1 ๋ผ์šด๋“œ์—์„œ ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. N์€ 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๋Š” N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๊ฐ€ ๋Œ€๊ฒฐํ•˜๋Š” ๋ผ์šด๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์„œ๋กœ ๋Œ€๊ฒฐํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.


 

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

16 1 2

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

1

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

16 8 9

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

4

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

1000 20 31

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

4

์˜ˆ์ œ ์ž…๋ ฅ 4 ๋ณต์‚ฌ

65536 1000 35000

์˜ˆ์ œ ์ถœ๋ ฅ 4 ๋ณต์‚ฌ

16

์˜ˆ์ œ ์ž…๋ ฅ 5 ๋ณต์‚ฌ

60000 101 891

์˜ˆ์ œ ์ถœ๋ ฅ 5 ๋ณต์‚ฌ

10

ํ’€์ด๊ณผ์ •

๋ฌธ์ œ์—์„œ ํ† ๋„ˆ๋จผํŠธ๋กœ ๊ฒฝ๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ๋•Œ๋ฌธ์— ๊ฒฝ๊ธฐ์—์„œ ์ด๊ธฐ๋ฉด ๋‹ค์Œ ๋ฒˆํ˜ธ๋Š”

(๊ธฐ์กด๋ฒˆํ˜ธ / 2) = ๋‹ค์Œ๋ฒˆํ˜ธ ํ˜•์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๊ณ  ๊ธฐ์กด๋ฒˆํ˜ธ๊ฐ€ ( ๋ฒˆํ˜ธ(์ง์ˆ˜) / 2 ) ์ด๊ณ  ( (๋ฒˆํ˜ธ(ํ™€์ˆ˜) + 1) / 2๋กœ ์ง„ํ–‰์ด ๋˜๊ฒŒ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ํ˜•์‹์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ง„ํ–‰์ด ๋˜๊ณ 

ํ† ๋„ˆ๋จผํŠธ์— ๊ฒฝ์šฐ์—๋Š” 1 2 ๋Š” ๋ฐ”๋กœ ๋งŒ๋‚˜๋Š” ๊ฒฝ๊ธฐ์ด์ง€๋งŒ 8 9 ์— ๊ฒฝ์šฐ์—๋Š” 7 vs 8 9 vs 10 ์œผ๋กœ ๋ฐ”๋กœ ๋งŒ๋‚˜์ง€์•Š๋Š” ๊ฒฝ๊ธฐ๋กœ ์ง„ํ–‰์ด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๋„ ์‹ ๊ฒฝ์„ ์จ์„œ ๋ฌธ์ œ๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ•˜๋Š”๋ฐ.

๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” ์จ‹๋“  2๋ช…์ด ์„œ๋กœ ๋งŒ๋‚œ๋‹ค๋Š” ๊ฑฐ๋Š” ๋ฒˆํ˜ธ์˜ ์ฐจ์ด๊ฐ€ 1 ์ด๋ผ๋Š” ๊ฒƒ์ด๊ณ 

์˜ˆ๋ฅผ ๋“ค์–ด 1 vs 2 , 3 vs 4 , 5 vs 6 , 7 vs 8 , 9 vs 10 ์‹์œผ๋กœ ๊ฒฝ๊ธฐ๊ฐ€ ์ง„ํ–‰๋œ๋‹ค๋ฉด ๋ชจ๋“  ๊ฒฝ๊ธฐ๋Š” ํฐ ๊ฐ’์ด ์ง์ˆ˜๋ผ๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ

8๊ณผ 9๊ฐ€ ์žˆ๋‹ค๋ฉด ํ™€์ˆ˜๊ฐ€ ๋” ํฐ ๊ฐ’์ด๋ฏ€๋กœ ๋งŒ๋‚  ์ˆ˜ ์—†๋Š” ๊ฒฝ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

code

#include <iostream>
#include <algorithm>

int		main(void)
{
	int	n, k, l, count;

	std::cin >> n >> k >> l;
	count = 0;
	while (true)
	{
		count++;
		if (k - l == -1 || k - l == 1) 
			if (std::max(k, l) % 2 == 0)
				break;
		if (k % 2 != 0) k++;
		if (l % 2 != 0) l++;
		k = k / 2;
		l = l / 2;
	}
	std::cout << count;

	return (0);
}


ํ›„๊ธฐ

์ ์  ๋” ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ์œ„ํ•ด์„œ ์ฝ”๋“œ์งœ๋Š” ์Šต๊ด€์ด ๋ฐ”๋€Œ์–ด๊ฐ€๋Š”๊ฒƒ์ด ๋ณด์—ฌ์„œ ๋งˆ์Œ์— ๋“ ๋‹ค.