ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ณต๋ถ€/C++

๋ฐฑ์ค€ 3460๋ฒˆ : ์ด์ง„์ˆ˜ with C++

์—ฐ์ด14 2023. 2. 25. 15:26

๋ฌธ์ œ

์–‘์˜ ์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ 1์˜ ์œ„์น˜๋ฅผ ๋ชจ๋‘ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ตœํ•˜์œ„ ๋น„ํŠธ(least significant bit, lsb)์˜ ์œ„์น˜๋Š” 0์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , n์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106)

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, 1์˜ ์œ„์น˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ค„ ํ•˜๋‚˜์— ์ถœ๋ ฅํ•œ๋‹ค. ์œ„์น˜๊ฐ€ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ์ถœ๋ ฅํ•œ๋‹ค.

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

10์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณ€ํ™˜ํ•œ ๋’ค,

2์ง„์ˆ˜ ๋ฐฐ์—ด์—์„œ 1์ด ๋“ค์–ด๊ฐ„ ์ž๋ฆฌ์ˆ˜๋“ค์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

#include <iostream>
using namespace std;

int deci_bi(int N, int* bi);	// 10์ง„์ˆ˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜

int main() {
	int T, num[11];
	cin >> T;	// ํ…Œ์ŠคํŠธ ์ˆ˜

	for (int i = 0; i < T; i++) {
		cin >> num[i];	// ์ˆซ์ž ์ž…๋ ฅ๋ฐ›๊ธฐ
	}

	for (int i = 0; i < T; i++) {
		int bi[21] = { 0, };	// 2์ง„์ˆ˜ ์ž…๋ ฅ ์ดˆ๊ธฐํ™”
		int end = deci_bi(num[i], bi);	// 10์ง„์ˆ˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
		for (int j = 0; j < end; j++) {	
			if (bi[j] == 1) {	// 2์ง„์ˆ˜ ์ž๋ฆฟ๊ฐ’์ด 1์ธ ์ž๋ฆฟ์ˆ˜ ์ถœ๋ ฅ
				cout << j << " ";
			}
		}
		cout << "\n";
	}

	return 0;
}

int deci_bi(int N, int* bi) {	// 10์ง„์ˆ˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
	int temp = N, i = 0;

	while (temp > 0) {
		if (temp % 2 == 1) {
			bi[i] = 1;
		}
		temp = (temp - (temp % 2)) / 2;
		i++;
	}

	return i;
}