상세 컨텐츠

본문 제목

3707 : 합의 개수

AP 프로그래밍

by yalu 2023. 7. 3. 22:35

본문

오늘은 코드업 문제인 '주어진 정수로 만들 수 있는 합의 경우의 수' 문제에 대한 해결 코드를 설명하는 블로그를 작성해보겠쇼



문제 설명
주어진 정수 n을 만들 수 있는 합의 경우의 수를 출력하는 문제입니다. 단, 자기 자신인 n을 제외한 합의 경우의 수를 구해야 합니다.

입력
정수 n을 입력받습니다. (2 이상 60 이하)

출력
경우의 수를 첫 줄에 출력합니다. 숫자는 같지만 더하는 순서가 다르면 다른 경우로 간주합니다.

문제 해결 코드
이 문제를 해결하기 위해서는 주어진 정수 n에 대해 경우의 수를 구하는 공식을 사용하면 됩니다. 주어진 코드는 다음과 같습니다.

 

#include<stdio.h>
#include<math.h>

int main() {
    int n;
    scanf("%d", &n);
    long long int m = pow(2, n - 1);
    printf("%lld", m - 1);
    return 0;
}


주어진 코드는 입력으로 정수 n을 받아서 2의 (n-1) 승을 계산하고, 그 결과에서 1을 뺀 값을 출력합니다. 이는 주어진 정수 n을 만들 수 있는 합의 경우의 수를 구하는 공식입니다.
코드 설명
주어진 코드에서 사용된 주요 함수와 변수에 대해 간단히 설명하겠습니다.
scanf("%d", &n): 사용자로부터 정수 n을 입력받습니다.
pow(2, n - 1): 2의 (n-1) 승을 계산합니다. 이를 통해 주어진 정수 n을 만들 수 있는 합의 경우의 수를 구합니다.
printf("%lld", m - 1): 계산된 경우의 수에서 1을 뺀 값을 출력합니다.


문제 해결 방법
이 문제는 주어진 정수 n을 만들 수 있는 합의 경우의 수를 구하는 것입니다. 주어진 코드에서는 2의 (n-1) 승에서 1을 뺀 값을 출력하는 방식으로 문제를 해결합니다.

이 공식은 주어진 정수 n을 이진수로 표현했을 때, 마지막 비트를 제외한 나머지 비트들의 모든 조합을 나타내는 것과 동일합니다. 예를 들어, n=4인 경우 이진수로는 '100'이고, 가능한 조합은 '000', '001', '010', '011'입니다. 이 조합의 개수는 2의 (4-1) 승인 8개입니다. 하지만 문제에서는 자기 자신인 n을 제외해야 하므로 1을 뺀 값을 출력합니다.

이러한 방식으로 주어진 정수 n을 이진수로 표현하고, 마지막 비트를 제외한 나머지 비트들의 모든 조합의 개수를 구하여 문제를 해결할 수 있습니다.

여기까지 코드업 문제인 '주어진 정수로 만들 수 있는 합의 경우의 수' 문제를 해결하는 방법에 대해 알아보았습니다. 해당 블로그에서는 문제의 설명, 입력 및 출력 형식, 문제 해결 방법, 그리고 코드 설명까지 다루었습니다.

'AP 프로그래밍' 카테고리의 다른 글

4454 : 촌수 계산  (0) 2023.07.17
3806 : 동물원  (0) 2023.07.03
3520 : 체커 도전 (N-Queen Problem)  (0) 2023.05.31
먹느냐 먹히느냐  (2) 2023.05.18
0 만들기  (1) 2023.05.16

관련글 더보기