※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 8741번 문제인 이진수 합이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/8741 

 

8741번: 이진수 합

첫째 줄에 이진수로 나타냈을 때, k자리 이하인 모든 자연수의 합을 이진수로 출력한다.

www.acmicpc.net

K가 너무 커 숫자를 직접 더하는 것은 (큰 수의 연산을 구현하지 않는 이상) 무리이다.

 

먼저 간단히 규칙을 찾아보면

 

1자리 이하의 합: 1(10) = 1(2)

2자리 이하의 합: 6(10) = 110(2)

3자리 이하의 합: 28(10) = 11100(2)

4자리 이하의 합: 120(10) = 1111000(2)

...

 

임을 알 수 있다.

자릿수 K가 주어졌을 때 출력해야하는 이진수가 무엇인지 규칙이 보이는 것 같다. 그 규칙이 실제로 맞는지의 증명은 각 K에 대하여 1부터 (2^K)-1까지의 수의 합을 계산해낸 후 비교하는 것으로 간단히 할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int K; cin >> K;
	for (int i = 0; i < K; i++) cout << '1';
	for (int i = 1; i < K; i++) cout << '0';
}
728x90

+ Recent posts