라벨이 프로그래밍인 게시물 표시

추천글

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. 반복문을 사용한 기본 변환 이 방법은 이진수의 각 자릿수를 오른쪽에서 왼쪽으로 읽으며, 각 자릿수에 2의 거듭제곱을 곱해 십진수를 계산합니다. #include <stdio.h> int binaryToDecimal(long long binary) { int decimal = 0, base = 1; while (binary) { int digit = binary % 10; decimal += digit * base; base *= 2; binary /= 10; } return decimal; } int main() { long long binary; printf("이진수를 입력하세요: "); scanf("%lld", &binary); printf("십진수: %d\n", binaryToDecimal(binary)); return 0; } 설명: 입력된 이진수를 정수로 처리하고, 각 자릿수를 추출하여 2의 거듭제곱(base)을 곱합니다. 이 방법은 직관적이며, 입력이 긴 이진수일 때도 효과적입니다. 2. 문자열로 처리하는 방법 이진수를 문자열로 입력받아 각 문자를 처리하는 방법입니다. 문자열의 각 문자를 숫자로 변환하여 계산합니다. #include <stdio.h> #include <string.h> int binaryToDeci...

복리 이자 계산 프로그램 5가지

복리 이자는 원금에 이자가 붙고, 그 이자가 다음 기간에 다시 이자를 발생시키는 방식입니다. 아래는 C 언어로 복리 이자 계산을 5가지 방법으로 구현한 예제입니다. 각 방법은 다른 접근법을 사용하여 코딩테스트에 대비할 수 있도록 설계되었습니다. 1. 기본 반복문 사용 가장 직관적인 방법으로, for 루프를 사용하여 매년 이자를 계산합니다. #include <stdio.h> int main() { double principal = 1000.0; // 원금 double rate = 0.05; // 연 이율 (5%) int years = 10; // 기간 (년) double amount = principal; for (int i = 0; i < years; i++) { amount += amount * rate; // 복리 계산: A = P(1 + r) } printf("원금: %.2f, %d년 후 금액: %.2f\n", principal, years, amount); return 0; } 2. pow 함수 사용 (수학 라이브러리) 수학 라이브러리의 pow 함수를 사용하여 복리 이자 공식 A = P(1 + r)^t를 직접 구현합니다. #include <stdio.h> #include <math.h> int main() { double principal = 1000.0; // 원금 double rate = 0.05; // 연 이율 int years = 10; // 기간 double amount = principal * pow(1 + rate, years); printf("원금: %.2f, %d년 후 금액: %.2f\n", principal, years, amount); return 0; } 3. ...

코테 - 소수 판별하기: 5가지 방법

코딩테스트에서 자주 등장하는 소수 판별 문제를 C언어로 구현한 5가지 방법을 소개합니다. 각 방법은 효율성과 구현 방식에서 차이가 있으며, 다양한 상황에 적합한 접근법을 제공합니다. 방법 1: 기본 반복문 가장 직관적인 방법으로, 2부터 입력 숫자의 절반까지 나누기를 시도하여 소수를 판별합니다. #include <stdio.h> int isPrimeBasic(int n) { if (n <= 1) return 0; for (int i = 2; i <= n / 2; i++) { if (n % i == 0) return 0; } return 1; } int main() { int num; printf("숫자를 입력하세요: "); scanf("%d", &num); if (isPrimeBasic(num)) printf("%d는 소수입니다.\n", num); else printf("%d는 소수가 아닙니다.\n", num); return 0; } 장점: 이해하기 쉽고 간단함 단점: 비효율적이며 큰 숫자에서 성능 저하 방법 2: 제곱근까지 확인 소수의 약수는 제곱근까지만 확인하면 충분하므로 반복 범위를 줄여 효율성을 높입니다. #include <stdio.h> #include <math.h> int isPrimeSqrt(int n) { if (n <= 1) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (int i = 3; i ...

코테 - C 언어로 세 숫자 중 가장 큰 수 찾기

코딩 테스트에서 자주 등장하는 문제 중 하나인 "세 숫자 중 가장 큰 수 찾기"를 C 언어로 5가지 방법으로 구현해 보았습니다. 각 방법은 간단하면서도 다양한 접근법을 보여주며, 초보자부터 숙련자까지 참고할 수 있습니다. 전체 코드 아래는 세 숫자를 입력받아 각 방법으로 최대값을 출력하는 C 언어 코드입니다. #include <stdio.h> // 공통 입력을 위한 변수 int a, b, c; int main() { // 세 숫자 입력 printf("세 숫자를 입력하세요: "); scanf("%d %d %d", &a, &b, &c); // 방법 1: if-else 문 사용 int max1; if (a >= b && a >= c) { max1 = a; } else if (b >= a && b >= c) { max1 = b; } else { max1 = c; } printf("방법 1 (if-else): %d\n", max1); // 방법 2: 삼항 연산자 사용 int max2 = (a >= b) ? ((a >= c) ? a : c) : ((b >= c) ? b : c); printf("방법 2 (삼항 연산자): %d\n", max2); // 방법 3: math.h의 fmax 사용 (정수형으로 캐스팅) #include <math.h> int max3 = (int)fmax(fmax(a, b), c); printf("방법 3 (fmax): %d\n", max3); // 방법 ...

기술면접 - 이진 검색 트리 유효성 검사 (Validate Binary Search Tree)

  중위 순회(Inorder Traversal)와 범위 검사(Range Check)를 활용한 C 언어 구현 이진 검색 트리(BST)란? 이진 검색 트리(BST)는 각 노드의 왼쪽 서브트리 값이 현재 노드보다 작고, 오른쪽 서브트리 값이 현재 노드보다 큰 규칙을 따르는 트리입니다. BST는 다음과 같은 성질을 만족합니다: 왼쪽 서브트리 : 현재 노드보다 작은 값만 포함. 오른쪽 서브트리 : 현재 노드보다 큰 값만 포함. 재귀적 성질 : 모든 서브트리도 BST여야 함. 이 규칙을 위반하면 유효한 BST가 아니므로, 이를 확인하는 알고리즘이 필요합니다. 이번 포스트에서는  중위 순회 와  범위 검사  두 가지 방법을 C 언어로 구현해 봅니다. 1. 중위 순회(Inorder Traversal) 방법 개념 BST의 중위 순회는 노드를 오름차순으로 방문합니다. 즉, 중위 순회 중 이전 노드의 값보다 현재 노드의 값이 작거나 같으면 BST 규칙을 위반한 것입니다. 장점 구현이 간단하고 직관적. 추가 메모리 사용이 최소화됨. 단점 재귀 호출로 인해 트리의 높이에 비례하는 스택 공간 필요. C 언어 구현 #include <stdio.h> #include <stdlib.h> #include <limits.h> // 트리 노드 구조체 정의 typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 이전 노드 값을 저장하는 전역 변수 int prev = INT_MIN; // 중위 순회로 BST 유효성 검사 int isValidBST_inorder(TreeNode* root) { if (root == NULL) { return 1; // 빈 트리는 유효 } // 왼쪽 서브트리 검사 if (!isValidBST_inorder(root-...

기술면접 - 팰린드롬 확인

팰린드롬 확인 (Check if a String is a Palindrome) 이 글에서는 C언어를 사용하여 문자열이 팰린드롬인지 확인하는 방법을 자세히 설명합니다. 팰린드롬이란, 문자열을 뒤집어도 동일한 문자열을 의미합니다. 예를 들어, "radar"나 "A man a plan a canal Panama"는 팰린드롬입니다. 이 글에서는 공백과 대소문자 처리 방법, 그리고 코드 최적화 방안까지 다룹니다. 1. 팰린드롬이란? 팰린드롬(Palindrome)은 문자열을 처음부터 읽거나 끝에서부터 읽었을 때 동일한 결과를 내는 문자열입니다. 예를 들어: "racecar" → 팰린드롬 "A level eye level A" → 공백과 대소문자를 무시하면 팰린드롬 "hello" → 팰린드롬 아님 문제는 공백, 대소문자, 특수문자 등을 어떻게 처리할지에 따라 복잡도가 달라집니다. 2. 문제 정의 주어진 문자열이 팰린드롬인지 확인하는 프로그램을 작성해야 합니다. 다음 조건을 만족해야 합니다: 대소문자를 구분하지 않음 (예: 'A'와 'a'는 동일하게 처리). 공백과 특수문자를 무시 (알파벳과 숫자만 고려). 효율적인 알고리즘으로 처리 (O(n) 시간 복잡도 목표). 3. C언어 구현 아래는 위 조건을 만족하는 C언어 코드입니다. 이 코드는 입력 문자열을 받아 팰린드롬 여부를 판단합니다. #include <stdio.h>...

기술면접 - 단일 연결 리스트 역순: 반복적 및 재귀적 방법

단일 연결 리스트를 역순으로 만드는 것은 컴퓨터 과학에서 중요한 문제로, 코딩 인터뷰와 데이터 구조 강의에서 자주 등장합니다. 단일 연결 리스트는 각 노드가 값과 다음 노드를 가리키는 포인터를 포함하는 선형 데이터 구조입니다. 마지막 노드는 NULL 을 가리킵니다. 리스트를 역순으로 만들면 마지막 노드가 첫 번째 노드가 되고, 그 다음 노드가 두 번째가 되는 식으로 순서가 바뀝니다. 이 글에서는 단일 연결 리스트를 역순으로 만드는 두 가지 일반적인 방법인 반복적 방법과 재귀적 방법을 C 언어로 구현합니다. C 코드 예제와 함께 두 방법의 차이점을 자세히 설명합니다. 난이도: 3/10 근거: 반복/재귀 모두 O(n) 시간. 포인터 조작이 약간 까다로울 수 있지만, 기본적인 링크드 리스트 문제. 1. 단일 연결 리스트 이해하기 알고리즘을 살펴보기 전에 단일 연결 리스트의 구조를 간단히 알아보겠습니다. 값이 1, 2, 3, 4인 노드로 구성된 리스트를 예로 들어 보겠습니다: 원래 리스트 : 1 -> 2 -> 3 -> 4 -> NULL 역순 리스트 : 4 -> 3 -> 2 -> 1 -> NULL 각 노드는 다음과 같은 필드를 가집니다: data : 노드의 값(예: 1, 2, 3, 4) next : 다음 노드를 가리키는 포인터(마지막 노드에서는 NULL ) 목표는 이 next 포인터의 방향을 바꿔 리스트를 역순으로 만드는 것입니다. 2. 반복적 방법 반복적 방법은 세 개의 포인터를 사용하여 리스트를 한 번 순회하며 링크를 역순으로 변경합니다. 이 방법은 메모리 사용이 적고 효율적입니다. 단계: 세 개의 포인터를 초기화합니다: previous :...

기술면접 - 문자열 뒤집기

이 글에서는 C 언어를 사용해 문자열을 뒤집는 알고리즘을 설명합니다. 특히, 추가 메모리 없이 in-place로 해결하는 방법에 초점을 맞춥니다. 난이도: 1/10 근거: 투 포인터로 O(n) 시간, O(1) 공간. 가장 기본적인 알고리즘 문제로 구현이 매우 직관적. 문제 정의 주어진 문자열(예: "hello")을 뒤집어서 "olleh"로 만드는 알고리즘을 작성합니다. 추가 메모리를 최소화하거나 사용하지 않고 in-place로 해결할 수 있는지 알아봅니다. In-Place 문자열 뒤집기 C에서 문자열은 일반적으로 char 배열로 표현되며, 문자열의 끝은 널 문자( \0 )로 표시됩니다. In-place 알고리즘은 추가적인 배열을 할당하지 않고, 기존 배열 내에서 요소를 교환하여 문자열을 뒤집습니다. 아이디어는 다음과 같습니다: 문자열의 양 끝에서 시작해 중앙으로 이동하며 문자 쌍을 교환합니다. 문자열 길이가 n 일 때, n/2 번의 교환으로 충분합니다. 넓 문자( \0 )는 교환하지 않습니다. 알고리즘 코드 #include <string.h> void reverseString(char* str) { if (str == NULL) return; // 문자열 길이 계산 int len = strlen(str); if (len <= 1) return; // 양 끝에서 시작해 중앙으로 이동 for (int i = 0, j = len - 1; i < j; i++, j--) { // 문자 교환 char temp = str[i]; str[i] = str[j]; str[j] = temp; } } 코드 설명 ...

기술면접 - Two Sum 문제 해결

  Two Sum 문제란? 난이도: 3/10 해시 테이블로 O(n) 해결 가능. 기본적인 자료구조 활용 문제로 초보자도 접근 가능. 최적화는 간단. Two Sum 은 대표적인 알고리즘 문제로, 정수 배열 nums 와 목표 합 target 이 주어졌을 때, 배열에서 두 숫자를 찾아 그 합이 target 이 되도록 하고, 해당 숫자들의 인덱스 를 반환하는 문제입니다. 조건은 다음과 같습니다: 각 입력에는 정확히 하나의 해답이 존재합니다. 같은 요소를 두 번 사용할 수 없습니다. 예시: 입력: nums = [2, 7, 11, 15] , target = 9 출력: [0, 1] (왜냐하면 nums[0] + nums[1] = 2 + 7 = 9 ) 왜 O(n) 시간 복잡도가 필요할까? 가장 직관적인 방법은 배열의 모든 숫자 쌍을 확인하는 것입니다. 하지만 이는 O(n²) 시간 복잡도를 가지므로 큰 배열에서는 비효율적입니다. 이를 개선하기 위해 해시 테이블 을 사용하면 O(n) 시간 복잡도로 문제를 해결할 수 있습니다. 해시 테이블은 숫자와 그 인덱스를 저장하여 빠른 조회를 가능하게 합니다. 해시 테이블의 작동 원리 해시 테이블을 사용한 Two Sum 해결 과정은 다음과 같습니다: 배열을 한 번 순회합니다. 각 숫자 nums[i] 에 대해: 보수 (complement, 즉 target - nums[i] )를 계산합니다. 해시 테이블에서 보수가 존재하는지 확인합니다. 보수가 있으면 해당 숫자의 인덱스와 현재 인덱스 i 를 반환합니다. 보수가 없으면 현재 숫자 nums[i] 와 그 인덱스 i 를 해시 테이블에 추가합니다. 이 방식은 배열을 단 한 번만 순회하므로 O(n) 시간 복잡도를 달성합니다. 코드 분석 위의 C 코드는 선형 탐사 (linear probing)를 사용한 해시 테이블로 Two Sum 문제를 해결합니다. 코드를 하나씩 살펴보겠습니다. 1. 해시 테이블 구조 typedef struct {  ...