※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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
'BOJ' 카테고리의 다른 글
[BOJ 18324 // C++] Race (0) | 2021.09.10 |
---|---|
[BOJ 12722 // C++] Mousetrap (Large) (0) | 2021.09.09 |
[BOJ 18222 // C++] 투에-모스 문자열 (0) | 2021.09.07 |
[BOJ 12888 // C++] 완전 이진 트리 도로 네트워크 (0) | 2021.09.06 |
[BOJ 1707 // C++] 이분 그래프 (0) | 2021.09.05 |