Algorithm/λ¬Έμ œν’€μ΄

[λ°±μ€€] 2097번 - μ‘°μ•½λŒ (C++)

moaoh 2023. 8. 11. 23:52

 

 

2097번: μ‘°μ•½λŒ

당신은 N개의 μ‘°μ•½λŒμ„ κ°€μ§€κ³  μžˆλ‹€. 이 μ‘°μ•½λŒμ„ μ’Œν‘œν‰λ©΄μ˜ 격자점 μœ„μ— μ•„λ¬΄λ ‡κ²Œλ‚˜ λ–¨μ–΄λœ¨λ Έλ‹€. κ²©μžμ μ΄λž€, xμ’Œν‘œμ™€ yμ’Œν‘œ λͺ¨λ‘κ°€ μ •μˆ˜μΈ 지점을 λ§ν•œλ‹€. 이λ₯Όν…Œλ©΄ (1, 1)μ΄λ‚˜ (0, -9)λŠ” 격자점

www.acmicpc.net

 

 

 

문제

당신은 N개의 μ‘°μ•½λŒμ„ κ°€μ§€κ³  μžˆλ‹€. 이 μ‘°μ•½λŒμ„ μ’Œν‘œν‰λ©΄μ˜ 격자점 μœ„μ— μ•„λ¬΄λ ‡κ²Œλ‚˜ λ–¨μ–΄λœ¨λ Έλ‹€. κ²©μžμ μ΄λž€, xμ’Œν‘œμ™€ yμ’Œν‘œ λͺ¨λ‘κ°€ μ •μˆ˜μΈ 지점을 λ§ν•œλ‹€. 이λ₯Όν…Œλ©΄ (1, 1)μ΄λ‚˜ (0, -9)λŠ” 격자점이며, (-2, 3.5)μ΄λ‚˜ (π, 7.14)λŠ” 격자점이 μ•„λ‹ˆλ‹€.

λͺ¨λ“  μ‘°μ•½λŒμ„ ν¬ν•¨ν•˜λŠ” κ°€μž₯ μž‘μ€ μ§μ‚¬κ°ν˜•μ„ 생각할 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ μ„Έ 개의 μ‘°μ•½λŒμ„ (2,4), (4, 8), (5,5)에 λ–¨μ–΄λœ¨λ Έλ‹€λ©΄, 이 μ„Έ μ‘°μ•½λŒμ„ λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” κ°€μž₯ μž‘μ€ μ§μ‚¬κ°ν˜•μ€ κ°€λ‘œ 3, μ„Έλ‘œ 4인 μ§μ‚¬κ°ν˜•μ΄λ‹€. 이 경우 μ§μ‚¬κ°ν˜•μ˜ λ‘˜λ ˆλŠ” 14κ°€ λœλ‹€. μ§μ‚¬κ°ν˜•μ˜ κ°€λ‘œμ™€ μ„Έλ‘œ κΈΈμ΄λŠ” λ°˜λ“œμ‹œ 1 이상이어야 ν•œλ‹€.

μ‘°μ•½λŒμ˜ 개수 N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μ‘°μ•½λŒμ„ μ’Œν‘œν‰λ©΄μ˜ κ²©μžμ μ— 적절히 λ–¨μ–΄λœ¨λ €μ„œ λͺ¨λ“  μ‘°μ•½λŒμ„ ν¬ν•¨ν•˜λŠ” μ§μ‚¬κ°ν˜•μ˜ λ‘˜λ ˆλ₯Ό μ΅œμ†Œλ‘œ ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

 

μž…λ ₯

첫째 쀄에 μ‘°μ•½λŒμ˜ 개수 N(1 ≤ n ≤ 500,000,000)이 μ£Όμ–΄μ§„λ‹€.

 

 

 

좜λ ₯

첫째 쀄에 μ΅œμ†Œ λ‘˜λ ˆλ₯Ό 좜λ ₯ν•œλ‹€.

 

 

 

풀이과정

예제 해석

예제λ₯Ό ν•΄μ„ν•΄λ³΄μžλ©΄ μœ„μ™€ κ°™λ‹€.

λŒμ„ μ΅œλŒ€ν•œ 배치λ₯Ό μž˜ν•΄μ„œ λ‘˜λ ˆλ₯Ό κ°€μž₯ μž‘κ²Œ λ§Œλ“€λ©΄ λ˜λŠ” λ¬Έμ œμ˜€μ—ˆλŠ”λ°

μ§μ‚¬κ°ν˜•μ˜ λ‘˜λ ˆλ₯Ό κ΅¬ν•˜λŠ” 곡식이 ( a * 2 ) + ( b * 2 ) μ΄λ‹€λ³΄λ‹ˆ a + b의 값을 κ°€μž₯ μž‘κ²Œ λ§Œλ“€λ©΄ λ˜λŠ” λ¬Έμ œμ˜€λ‹€.

a + bλ₯Ό κ°€μž₯ μž‘κ²Œ λ§Œλ“€λ €λ©΄ μ˜ˆμ œμ™€ 같이 1 + 2 μ΄κ±°λ‚˜ 3 + 3μ΄κ±°λ‚˜ 인 ν˜•μ‹μ΄λ‹€λ³΄λ‹ˆ κ·œμΉ™μ„±μ„ 비ꡐ해보면 a 와 b의 κ°’μ˜ 차이가 κ°€μž₯ μž‘μ„ 수둝 λ‘˜λ ˆμ˜ μ΅œμ†ŒκΈΈμ΄κ°€ λœλ‹€λŠ” 것을 μ•Œ 수 μžˆκΈ°λ•Œλ¬Έμ— a ± 1 >= b λΌλŠ” ν˜•μ‹μ˜ 식이 μ„±λ¦½ν•΄μ•Όν•œλ‹€λŠ” 것을 확인해볼 수 μžˆμ—ˆλ‹€.

κ·Έλž˜μ„œ nμ΄λΌλŠ” 값에 제곱수λ₯Ό κ΅¬ν•˜κ²Œ 되면 a ± 1 >= b λΌλŠ” 식에 κ°€μž₯ 성립이 λ˜λŠ” 값이 λ‚˜μ˜€κ²Œ λ˜μ–΄ 풀이λ₯Ό μ§„ν–‰ν•˜κ²Œ λ˜μ—ˆμ—ˆλ‹€.

 

λ¬Έμ œμ—μ„œλŠ” "μ§μ‚¬κ°ν˜•μ˜ κ°€λ‘œμ™€ μ„Έλ‘œ κΈΈμ΄λŠ” λ°˜λ“œμ‹œ 1 이상이어야 ν•œλ‹€."  λΌλŠ” 쑰건식이 μžˆλ‹€λ³΄λ‹ˆ

n 이 1μ΄λ‚˜ 2인 κ²½μš°μ—λ„ κ°€λ‘œ μ„Έλ‘œμ˜ 길이λ₯Ό 1둜 계산을 ν•΄μ€˜μ•Όν•œλ‹€. ( answer = 4 )

 

 

 

code

#include <iostream>
#include <math.h>

int		main(void)
{
	int n, root;
	std::cin >> n;
	if (n == 1 || n == 2)
		std::cout << 4;
	else {
		root = std::round(std::sqrt(n));
		if (root * root >= n)
			std::cout << (root - 1) * 4;
		else
			std::cout << ((root - 1) * 2) + ((root) * 2);
	}

	return (0);
}

 

ν›„κΈ°

λ¨Έλ¦¬λ‘œλŠ” μ΄ν•΄κ°€λ˜μ§€λ§Œ μ–΄λ–»κ²Œ 점화식을 μ„Έμ›Œμ•Όν• μ§€ 은근 고민을 λ§Žμ΄ν–ˆλ˜ λ¬Έμ œμ˜€λ˜ κ±° κ°™λ‹€.

μˆ˜ν•™μ μΈ κ°œλ…μ„ 쑰금 더 곡뢀λ₯Ό λ§Žμ΄ν•΄μ•Όν•  κ±° κ°™λ‹€.