본문 바로가기

C

(33)
[C/Python] 알고리즘 (스택 / 큐) 💡 1. 스택(Stack)의 기본: 가장 최근의 과거를 확인하다스택은 '방금 내가 한 행동'이나 '가장 최근의 데이터'를 확인하고 지울 때 강력한 힘을 발휘합니다.연속된 중복 제거 (같은 숫자는 싫어)별도의 상태 변수 없이 결과 배열 자체를 스택으로 활용합니다.파이썬은 answer[-1], C++은 **answer.back()**을 통해 맨 윗부분을 확인하여 다를 때만 데이터를 추가(push)합니다. 빈 배열 참조 에러를 막기 위한 단락 평가(or, ||)는 필수입니다.짝 맞추기와 O(1) 공간 최적화 (올바른 괄호)열린 괄호는 넣고, 닫힌 괄호는 빼는 것이 기본 원리입니다.하지만 괄호의 종류가 단 하나(())일 때는, 무거운 배열(리스트)을 쓰는 대신 정수형 변수(count) 하나만으로 상태를 추적하..
[C] 코딩 기초 트레이닝 (101 ~ 124) 📂 유형 1: 2차원 배열과 방향 벡터 (Direction Vector)'정수를 나선형으로 배치하기', '이차원 배열 대각선 순회' 등 공간을 제어하는 문제입니다. 수학적 계산보다는 시뮬레이션 방식이 요구됩니다.💡 핵심 복기 포인트방향 벡터(dr, dc) 도입: 복잡한 다중 for문 대신, 상하좌우 이동을 배열로 정의하여 코드를 간결하게 만드는 상태 머신(State Machine) 기법.엄격한 경계 검사(Boundary Check): nr = n과 같이 메모리 영역을 벗어나는지 확인하는 로직. 이는 시스템 해킹의 주원인인 Out-of-bounds 취약점을 방어하는 시큐어 코딩의 기본입니다.이중 포인터(**) 동적 할당: 포인터의 배열을 malloc으로 만들고, 각 행에 다시 메모리를 할당하는 2차원 ..
[C] 코딩 기초 트레이닝 (81 ~ 100) 📂 유형 1: 문자열 슬라이싱과 부분 추출가장 많이 등장하는 유형으로, strstr, strncpy, strdup 등을 활용해 특정 조건에 맞는 문자열 조각을 만드는 문제입니다.💡 핵심 복기 포인트포인터 연산: ptr2 - ptr1을 통해 두 지점 사이의 길이를 구하는 기술.메모리 할당: 추출할 길이에 널 문자(\0)를 위한 +1을 반드시 포함하는 습관.안전한 복사: strcpy보다는 길이를 지정할 수 있는 strncpy를 사용하여 Buffer Overflow 방지.📂 유형 2: 문자열 변환 및 필터링 (strtok 응용)'세 개의 구분자' 문제처럼 특정 문자를 기준으로 문자열을 쪼개고 정제하는 과정입니다.💡 핵심 복기 포인트strtok의 파괴적 특성: 원본 문자열을 \0으로 채우며 훼손하므로, ..
[C] 코딩 기초 트레이닝 (61 ~ 80) 이 구간에서는 단순히 데이터를 옮기는 것을 넘어, 특정 규칙에 따라 데이터를 가공하고 정렬하는 능력이 요구됩니다.1. 문자열 슬라이싱과 찾기 (61~68번)문자열 내에서 특정 패턴을 찾거나, 원하는 구간을 정확히 추출하는 문제입니다.주요 문제: 세로 읽기, 접미사 배열, 문자열 뒤집기, 특정 문자열 찾기 등핵심 포인트:2차원 인덱스 변환: '세로 읽기' 문제처럼 1차원 문자열을 가로 길이가 m인 2차원 판으로 생각하고 (row * m) + col 공식을 사용하는 법을 강조하세요.qsort와 strcmp: '접미사 배열' 정렬 시, 이중 포인터(char**)를 qsort에 넣을 때 비교 함수에서 어떻게 역참조하는지가 가장 큰 복습 포인트입니다.2. 배열(리스트) 변환과 필터링 (69~74번)주어진 배열에서..
[C] 코딩 기초 트레이닝 (41 ~ 60) 이번 구간은 단순한 입출력을 넘어, 조건에 따른 수열 변환과 문자열의 특정 구간을 자유자재로 다루는 능력이 핵심입니다.1. 문자열 심화 조작 (41~47번)문자열의 앞뒤를 자르거나, 특정 문자를 찾아 바꾸는 문제들이 포진해 있습니다.주요 문제: 문자열의 앞의 n글자, 접미사인지 확인하기, 문자열의 뒤의 n글자 등핵심 포인트:포인터 연산: my_string + (전체길이 - n)과 같은 포인터 덧셈을 활용하면 별도의 복사 루프 없이도 원하는 지점부터 문자열을 읽을 수 있습니다.strncpy 활용: 특정 개수만큼만 복사할 때는 strcpy보다 strncpy가 안전합니다. 단, 마지막에 \0을 수동으로 넣어주는 것을 잊지 마세요.2. 조건 기반 수열 변환 (48~53번)배열의 각 원소를 체크하여 특정 조건(홀..
[C] 코딩 기초 트레이닝 (21 ~ 40) 1. 문자열 조작 및 비교 (21~25번)이 구간은 문자열을 합치거나 특정 규칙에 따라 변환하는 능력을 시험합니다.주요 문제: 문자 리스트를 문자열로 변환하기, 문자열 곱하기, 더 크게 합치기 등핵심 포인트:strcat, strcpy를 사용할 때는 결과 문자열의 크기가 \0(널 문자)를 포함할 수 있을 만큼 충분한지 확인해야 합니다.더 크게 합치기: 두 숫자를 문자열로 변환(sprintf)한 뒤 붙여보고, 다시 숫자로 바꿔(atoi) 비교하는 방식이 직관적입니다.2. 조건문에 따른 연산 (26~30번)if-else 또는 switch문을 활용하여 비즈니스 로직을 구현하는 연습입니다.주요 문제: n의 배수, 공배수, flag에 따라 다른 값 반환하기 등핵심 포인트:공배수: number % n == 0 && ..
[C] 코딩 기초 트레이닝 124제 (1 ~ 20) 1. 문자열 출력하기문제: 주어진 문자열 str을 출력합니다.풀이: scanf로 입력받은 문자열을 printf로 출력합니다.2. a와 b 출력하기문제: 두 정수 a, b를 입력받아 a = {value}, b = {value} 형식으로 출력합니다.풀이: printf("a = %d\nb = %d", a, b); 형식을 사용합니다.3. 문자열 반복해서 출력하기문제: 문자열 str과 정수 n이 주어질 때, str을 n번 반복해서 출력합니다.풀이: for 루프를 사용해 n회 반복 출력합니다.4. 대소문자 바꿔서 출력하기문제: 알파벳으로 이루어진 문자열의 대문자는 소문자로, 소문자는 대문자로 바꿔 출력합니다.풀이: ASCII 값을 확인하여 대문자('A'~'Z')면 32를 더하고, 소문자('a'~'z')면 32를 빼..
[C] 프로그래머스 코딩 테스트 입문