추천글

2025 타임지 세계 영향력 100인에 포함된 한국인

  이재명 (지도자 부문) 로제 (Rosé) (개척자 부문) 1. 이재명 (지도자 부문) 배경 : 이재명은 대한민국의 야당 지도자이자 더불어민주당 전 대표로, 차기 대통령 선거의 유력 후보로 평가받고 있습니다. 농부 가정에서 태어나 어려운 어린 시절을 보냈으며, 공장에서 일하다 손목 부상을 당한 경험을 가지고 있습니다. 그는 성남시장과 경기도지사를 역임했으며, 2022년 대통령 선거에서 윤석열에게 근소한 차이로 패배했습니다. 최근 활동 : 2024년 1월 목에 칼에 찔리는 공격을 견뎌냈고, 같은 해 12월 윤석열 대통령의 계엄령 선언 이후 탄핵을 주도했습니다. 특히, 경찰 봉쇄를 뚫고 국회 울타리를 넘는 장면이 생중계되며 큰 주목을 받았습니다. 영향력 : 타임지는 이재명의 정치적 저항력과 리더십을 높이 평가하며, 그가 대통령에 당선될 경우 북한의 위협과 글로벌 무역 전쟁 등 복잡한 과제에 직면할 것이라고 언급했습니다. 인용구 : “세상을 배우는 방법은 많지만, 직접 살아보고 경험하는 것은 다르다” (2022년 타임 인터뷰). 작성자 : Charlie Campbell (타임 편집장 대행). 2. 로제 (Rosé, 개척자 부문) 배경 : 로제(본명: Roseanne Park)는 세계적인 K-팝 걸그룹 블랙핑크의 멤버로, 뉴질랜드에서 태어나 호주에서 자란 한국계 아티스트입니다. 블랙핑크는 전 세계적으로 가장 성공한 걸그룹 중 하나로, 로제는 팀 활동뿐 아니라 솔로 아티스트로서도 두각을 나타내고 있습니다. 최근 활동 : 2024년 10월, 브루노 마스(Bruno Mars)와의 협업 곡 “APT.”를 발표하며 글로벌 차트에서 큰 성공을 거두었습니다. 이 곡은 빌보드 글로벌 200 1위, 미국 빌보드 핫 100 8위(최고 순위 3위), 한국 써클 디지털 차트 1위를 기록하며 전 세계적으로 화제가 되었습니다. 유튜브 뮤직비디오는 1월에 10억 뷰를 돌파하며 역대 가장 빠른 기록 중 하나를 세웠습니다. 2024년 12월, 첫 솔로 정규...

코테 - 팩토리얼 계산 5가지 방법


팩토리얼은 수학에서 자주 등장하는 연산으로, 코딩테스트에서도 단골 문제입니다. 이번 포스트에서는 C언어를 사용해 팩토리얼을 계산하는 5가지 방법을 소개합니다. 각 방법은 성능과 코드 구조 면에서 차이가 있으니, 상황에 맞게 활용해보세요!


1. 반복문(Iterative) 방식

가장 직관적인 방법으로, 루프를 사용해 1부터 n까지 곱합니다. 메모리 효율이 좋고 스택 오버플로우 위험이 없습니다.

#include <stdio.h>

unsigned long long factorial_iterative(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main() {
    int n = 5;
    printf("%d! = %llu\n", n, factorial_iterative(n));
    return 0;
}
        

장점: 간단하고 빠름.
단점: 큰 숫자에서 오버플로우 가능성.


2. 재귀(Recursive) 방식

수학적 정의를 그대로 코드로 옮긴 방식입니다. n! = n × (n-1)!를 재귀 호출로 구현합니다.

#include <stdio.h>

unsigned long long factorial_recursive(int n) {
    if (n == 0 || n == 1) return 1;
    return n * factorial_recursive(n - 1);
}

int main() {
    int n = 5;
    printf("%d! = %llu\n", n, factorial_recursive(n));
    return 0;
}
        

장점: 코드가 간결하고 이해하기 쉬움.
단점: 큰 n에서 스택 오버플로우 위험.


3. 동적 프로그래밍(DP) 방식

메모이제이션을 사용해 중복 계산을 피합니다. 배열에 이전 결과를 저장해 효율성을 높입니다.

#include <stdio.h>
#include <stdlib.h>

unsigned long long factorial_dp(int n) {
    unsigned long long *dp = (unsigned long long *)malloc((n + 1) * sizeof(unsigned long long));
    dp[0] = 1;
    for (int i = 1; i <= n; i++) {
        dp[i] = i * dp[i - 1];
    }
    unsigned long long result = dp[n];
    free(dp);
    return result;
}

int main() {
    int n = 5;
    printf("%d! = %llu\n", n, factorial_dp(n));
    return 0;
}
        

장점: 메모리와 속도 최적화.
단점: 추가 메모리 사용.


4. 꼬리 재귀(Tail Recursive) 방식

재귀 호출을 최적화해 스택 사용을 최소화합니다. 누적 변수를 사용해 계산합니다.

#include <stdio.h>

unsigned long long factorial_tail_recursive(int n, unsigned long long acc) {
    if (n == 0 || n == 1) return acc;
    return factorial_tail_recursive(n - 1, n * acc);
}

unsigned long long factorial_tail(int n) {
    return factorial_tail_recursive(n, 1);
}

int main() {
    int n = 5;
    printf("%d! = %llu\n", n, factorial_tail(n));
    return 0;
}
        

장점: 일부 컴파일러에서 최적화 가능.
단점: C에서는 꼬리 재귀 최적화 미지원.


5. 룩업 테이블(Lookup Table) 방식

미리 계산된 팩토리얼 값을 배열에 저장해 조회합니다. 빠른 응답이 필요한 경우 유용합니다.

#include <stdio.h>

unsigned long long factorial_table(int n) {
    static unsigned long long table[] = {
        1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800,
        39916800, 479001600, 6227020800, 87178291200, 1307674368000,
        20922789888000, 355687428096000, 6402373705728000,
        121645100408832000, 2432902008176640000
    };
    if (n < 0 || n > 20) return 0; // 오버플로우 방지
    return table[n];
}

int main() {
    int n = 5;
    printf("%d! = %llu\n", n, factorial_table(n));
    return 0;
}
        

장점: 조회만 하므로 매우 빠름.
단점: 메모리 사용, 제한된 범위.


결론

각 방법은 사용 사례에 따라 적합성이 다릅니다. 코딩테스트에서는 메모리와 시간 제한을 확인한 뒤, 가장 적합한 방법을 선택하세요. 예를 들어, 입력 범위가 작다면 룩업 테이블이 유리하고, 범위가 크다면 반복문이나 동적 프로그래밍이 안전할 수 있습니다.

댓글