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

[λ°±μ€€] 3060번 - μš•μ‹¬μŸμ΄ 돼지 (C++)

moaoh 2023. 9. 18. 22:28

 

3060번: μš•μ‹¬μŸμ΄ 돼지

μž…λ ₯은 T개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Tκ°€ μ£Όμ–΄μ§„λ‹€. 각 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λŠ” 두 μ€„λ‘œ κ΅¬μ„±λ˜μ–΄ 있고, 첫째 μ€„μ—λŠ” ν•˜λ£¨μ— λ°°λ‹¬λ˜λŠ” 사

www.acmicpc.net

문제

유λͺ…ν•œ 농뢀 λ°•ν˜„μˆ˜λŠ” 돼지 6마리λ₯Ό ν‚€μš°κ³  μžˆλ‹€. κ·ΈλŠ” ν•˜λ£¨μ— ν•œ λ²ˆμ”© λΌμ§€μ—κ²Œ λ§›μžˆλŠ” λ°₯을 μ€€λ‹€.

λΌμ§€λŠ” μ›ν˜• 식탁에 μ•‰μ•„μ„œ 식사λ₯Ό ν•œλ‹€. ν˜„μˆ˜μ˜ 돼지듀은 κΈ°μ–΅λ ₯이 λ›°μ–΄λ‚˜κΈ° λ•Œλ¬Έμ— μ „ λ‚  μžμ‹ μ˜ μ–‘μͺ½κ³Ό λ§žμ€νŽΈμ— μ•‰μ•˜λ˜ 돼지가 λ¨Ήμ—ˆλ˜ 양을 κΈ°μ–΅ν•˜κ³  μžˆλ‹€. 또, μš•μ‹¬λ„ 많기 λ•Œλ¬Έμ—, κ·Έ 만큼의 양을 μΆ”κ°€ν•˜μ—¬ 식사λ₯Ό ν•˜κΈ°λ₯Ό μ›ν•œλ‹€.

예λ₯Ό λ“€μ–΄, ν˜„μˆ˜κ°€ 1λ²ˆλΆ€ν„° 6λ²ˆκΉŒμ§€ λΌμ§€μ—κ²Œ 각각 3, 2, 7, 1, 5, 4만큼 λ°₯을 μ£Όμ—ˆλ‹€λ©΄, 2번 λΌμ§€λŠ” 첫 λ‚  받은 μ–‘ 2에닀 μ–‘μͺ½κ³Ό λ§žμ€νŽΈ 돼지가 받은 μ–‘ 15(3+7+5)λ§ŒνΌμ„ 더해 17만큼 λ°›κΈ°λ₯Ό μ›ν•œλ‹€.

λ§ˆμŒμ”© 쒋은 농뢀 λ°•ν˜„μˆ˜λŠ” 이런 λΌμ§€μ˜ μš”κ΅¬λ₯Ό λͺ¨λ‘ λ“€μ–΄μ£Όλ €κ³  ν•œλ‹€. 맀일 ν˜„μˆ˜μ˜ 집에 μ‹ μ„ ν•œ μ‚¬λ£Œκ°€ N만큼 λ°°λ‹¬λœλ‹€. μ‚¬λ£Œμ˜ μœ ν†΅κΈ°ν•œμ€ ν•˜λ£¨μ΄κΈ° λ•Œλ¬Έμ—, 남은 μ‚¬λ£ŒλŠ” λͺ¨λ‘ νκΈ°ν•œλ‹€.

첫 λ‚  돼지듀이 λ¨Ήμ—ˆλ˜ 양이 μ£Όμ–΄μ‘Œμ„ λ•Œ, ν˜„μˆ˜κ°€ 6마리의 λΌμ§€λ“€μ˜ μš”κ΅¬λ₯Ό 듀어쀄 수 μ—†κ²Œ λ˜λŠ” 날이 λͺ‡ 번째 날인지 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

μž…λ ₯은 T개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Tκ°€ μ£Όμ–΄μ§„λ‹€. 각 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λŠ” 두 μ€„λ‘œ κ΅¬μ„±λ˜μ–΄ 있고, 첫째 μ€„μ—λŠ” ν•˜λ£¨μ— λ°°λ‹¬λ˜λŠ” μ‚¬λ£Œμ˜ μ–‘ N (1<=N<=500,000,000)이 μ£Όμ–΄μ§„λ‹€. κ·Έ λ‹€μŒ μ€„μ—λŠ” 1, 2, 3, 4, 5, 6번 돼지가 첫 λ‚  λ¨Ήμ—ˆλ˜ μ‹μ‚¬μ˜ 양이 빈 칸을 사이에 두고 μ°¨λ‘€λŒ€λ‘œ μ£Όμ–΄μ§„λ‹€. 첫째 날에 각 돼지가 λ¨ΉλŠ” μ‚¬λ£Œμ˜ 양은 100μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

 

좜λ ₯

각 ν…ŒμŠ€νŠΈ 데이터에 λŒ€ν•΄, 6마리 λΌμ§€μ˜ μš”κ΅¬λ₯Ό λͺ¨λ‘ 듀어쀄 수 μ—†κ²Œ λ˜λŠ” 날이 λͺ‡ 번째 날인지 좜λ ₯ν•œλ‹€.

풀이과정

문제λ₯Ό μ²˜μŒμ—λŠ” μ–΄λ–»κ²Œ λ‘œμ§μ„ κ΅¬μ„±ν• κΉŒ 고민을 ν•˜λ‹€κ°€

λ¬Έμ œμžμ²΄μ— κ·œμΉ™μ„±μ΄ μžˆλ‹€λŠ” 것을 ν™•μΈν•˜κ³  ν•΄λ‹Ήλ°©λ²•μœΌλ‘œ 풀이λ₯Ό μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ“€μ–΄μ˜¨ λΌμ§€λ“€μ˜ 값을 λͺ¨λ‘ λ”ν•œ 값을 * 4 ν•˜λ©΄ λ‹€μŒλ‚ μ˜ 값이 λ˜λŠ” λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

 

code

#include <iostream>

// 3, 2, 7, 1, 5, 4 = 22
// 10, 17, 14, 16, 12, 19 = 88
int		main(void)
{
	long long t, n, temp, sum, day;

	std::cin >> t;
	for (int i = 0; i < t; i++) {
		std::cin >> n;
		sum = 0;
		for (int j = 0; j < 6; j++) {
			std::cin >> temp;
			sum += temp;
		}
		day = 1;
		while (sum <= n) {
			day++;
			sum *= 4;
		}
		std::cout << day << "\n";
	}

	return (0);
}

 

ν›„κΈ°

κ·œμΉ™μ„±μ΄λΌλŠ” 것을 λ°œκ²¬ν•˜κΈ°μ— μ°Έ μ–΄λ €μš΄ κ±° κ°™λ‹€.