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

[λ°±μ€€] 1373번 - 2μ§„μˆ˜ 8μ§„μˆ˜ (C++)

moaoh 2023. 8. 2. 23:16

 

1373번: 2μ§„μˆ˜ 8μ§„μˆ˜

첫째 쀄에 2μ§„μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” 수의 κΈΈμ΄λŠ” 1,000,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net

문제

2μ§„μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

μž…λ ₯

첫째 쀄에 2μ§„μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” 수의 κΈΈμ΄λŠ” 1,000,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

 

 

좜λ ₯

첫째 쀄에 μ£Όμ–΄μ§„ 수λ₯Ό 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•œλ‹€.

 

풀이과정

λ¬Έμ œμ—μ„œλŠ” 2μ§„μˆ˜λ‘œ λ“€μ–΄μ˜€λŠ” 값을 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•˜λΌλŠ” 것이 문제의 μ΄μ•ΌκΈ°μ˜€λ‹€.

8μ§„μˆ˜λΌλŠ”κ±΄ 1 ~ 7 κΉŒμ§€λ‘œ ν‘œν˜„ν•  수 μžˆλŠ” 수λ₯Ό μ΄μ•ΌκΈ°ν•˜λ‹ˆκΉŒ 7을 2μ§„μˆ˜λ‘œ λ³€ν™˜μ„ 해보면 111μ΄λ‹ˆ 즉 2μ§„μˆ˜ 3자리면 8μ§„μˆ˜μ˜ 1μžλ¦¬κ°€ λœλ‹€κ³  생각을 ν•˜λ©΄ λœλ‹€. κ·Έλž˜μ„œ 2μ§„μˆ˜λ₯Ό λ’€μ—μ„œλΆ€ν„° 3μžλ¦¬μ”© 짜λ₯΄κ³  8μ§„μˆ˜λ‘œ λ³€ν™˜μ„ ν•˜λ©΄ λœλ‹€.

 

μ˜ˆμ‹œμ— λ‚˜μ™€μžˆλŠ” 11001100λ₯Ό 2μ§„μˆ˜μ—μ„œ 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 과정은

"11", "001", "100" ν˜•μ‹μœΌλ‘œ 잘라주고 맨 μ•žμ—μžˆλŠ” 11은 2μžλ¦¬μ΄λ―€λ‘œ μ•žμ— "0"을 λΆ™μ—¬μ€€λ‹€.

011 = (0 * 4) + (1 * 2) + (1 * 1) = 3

001 = (0 * 4) + (0 * 2) + (1 * 1) = 1

100 = (1 * 4) + (0 * 2) + (0 * 1) = 4

μ΄λ―€λ‘œ 예제 좜λ ₯이 314κ°€ λœλ‹€.

( μ˜ˆμ‹œλ‘œ 2μ§„μˆ˜λ₯Ό 16μ§„μˆ˜λ‘œ λ³€ν™˜ν• λ €λ©΄ 16은 2μ§„μˆ˜λ‘œ 4μžλ¦¬μ΄λ―€λ‘œ 4μžλ¦¬μ”© μ§€λΌμ„œ 계산을 ν•˜λ©΄λœλ‹€. )

 

 

code

#include <iostream>
#include <stdlib.h>

int		main(void)
{	
	int	sum;
	std::string	str;

	std::cin >> str;
	// 4 2 1
	if (str.length() % 3 != 0) {
		for (int i = 0; i < (str.length() % 3); i++)
			str = "0" + str;
	}
	for (int i = 0; i < str.length(); i += 3) {
		sum = (((int)str[i] - '0') * 4) + (((int)str[i + 1] - '0') * 2) + (((int)str[i + 2] - '0') * 1);
		std::cout << sum;
	}

	return (0);
}

 

ν›„κΈ°

μ§„λ²•λ³€ν™˜ν•˜λŠ” 방법을 μ˜€λžœλ§Œμ— λ³΄λ‹€λ³΄λ‹ˆ 잘λͺ°λΌμ„œ 많이 μ°Ύμ•„λ΄€μ—ˆλ‹€.