Language/C

    [C언어 기초 정리] #4 조건문

    [C언어 기초 정리] #4 조건문

    해당 게시물은 2020년 1학기 교내에서 진행한 튜터링 활동 '같이피움' 에 튜터로 활동하며 쓰였던 자료를 정리한 것 입니다. ​ 이곳에 적은 글들은 전부 튜티에게 설명해주기 위해 정리한 내용으로 틀리거나 부족한 내용이 있을 수 있습니다. 그러므로 지적/수정 댓글은 언제나 환영입니다 :) 지금까지 우리는 C언어가 절차 지향 프로그래밍 언어라는 것과 입출력, 변수와 연산자를 사용해서 여러가지 연산이 가능하다는 것을 배웠다. 이제 첫 발걸음을 떼었으니 프로그래밍 기초의 꽃인 '조건문'과 '반복문'을 배워보자. 프로그래밍을 하다보면 개발자가 의도한대로 실행의 흐름을 바꿔주어야 하는 경우가 무척 많다. 예를 들어, 사용자의 입력을 무한히 받을 수 있고, 1이라고 입력했을 때만 프로그램을 끝내게 하는 코드를 짜보..

    [C언어 기초 정리] #3 연산자

    [C언어 기초 정리] #3 연산자

    해당 게시물은 2020년 1학기 교내에서 진행한 튜터링 활동 '같이피움' 에 튜터로 활동하며 쓰였던 자료를 정리한 것 입니다. ​ 이곳에 적은 글들은 전부 튜티에게 설명해주기 위해 정리한 내용으로 틀리거나 부족한 내용이 있을 수 있습니다. 그러므로 지적/수정 댓글은 언제나 환영입니다 :) 1. 연산자 프로그래밍에서는 다양한 산술과 논리 연산이 가능하다. 놀랍게도 우리는 연산자 라는 개념을 배우기 이전부터 사용을 해 왔는데 바로 '=' 이것이다. 우리는 이것을 '대입 연산자' 라고 부른다. - 대입 연산자 C언어에서 '='는 같다는 의미가 아니라, 오른쪽 것을 왼쪽에 대입한다는 의미로 쓰인다. int a = 1; // a라는 정수형 변수에 1을 대입한다. y = x = 1; // x에 1값을 대입하고, y..

    [C언어 기초 정리] #2 변수와 자료형

    [C언어 기초 정리] #2 변수와 자료형

    이 카테고리는 2020년 1학기 교내에서 진행한 튜터링 활동에 쓰였던 자료를 기반으로 C언어 프로그래밍에 관한 내용을 정리한 것이다. ​ 이곳에 적은 글들은 전부 내가 배운 것을 튜티에게 설명해주기 위해 정리한 내용으로 틀리거나 부족한 내용이 있을 수 있다. 그러므로 지적/수정은 언제나 환영이다 :) 1. 변수(Variable) 변수란 바뀔 수 있는 값에 이름을 붙이는 것이다. 특정 수나 문자가 나의 코드에서 계속해서 쓰이게 된다면 우리는 그 숫자를 변수로 지정해 사용할 수 있다. 예를 들어 사용자가 입력한 숫자에 내가 1이라는 숫자를 더해주는 작업을 해주어야 할 때 1을 변수로 지정해 사용할 수 있다. int one = 1; //one 이라는 변수에 1을 저장한다 // 이 one 은 이후 코드에서는 1..

    [C언어] gets, puts 문자열 입출력 함수

    [C언어] gets, puts 문자열 입출력 함수

    gets 함수 : 표준 입력(stdin)에서 입력받은 문자열을 사용자가 전달한 메모리에 C언어 스타일 문자열인 char*, char[] 타입으로 저장해 주는 함수 #include // 표준 입력 함수 //함수 원형 char* gets(char* str); 들어온 문자열 끝에 '\0'을 붙여줌 //gets 예시 char str[100]; gets(str); //사용자의 입력을 str에 저장 printf("%s", str); // 끝에 \n가 붙기 때문에 자동으로 줄바꿈 * 최신 visual studio에서는 버퍼 오버플로우가 날 수 있기 때문에 get_s 사용하기를 권장한다. puts 함수 : C언어 스타일의 문자열을 표준 출력(stdout)으로 보내는 함수 #include //헤더 파일 int puts(..

    C언어 스택(stack)

    C언어 스택(stack)

    ✔️Stack 이란? 먼저 들어간 자료가 나중에 나오는 자료구조. 후입선출 FILO(First In Last Out) ❓ Restricted structure 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려있는 자료구조 ex) 스택, 큐, 덱 ... ✔️원소의 삽입, 제거, 확인 시간복잡도 O(1) 원소의 확인은 원칙적으로 상단만 가능하다. 상단이 아닌 나머지 원소들의 확인, 변경이 불가하다. 추가, 제거, 상단 원소 확인 외에는 스택이 제공하는 기능이 아니다. [코드] // BOJ_10828 #include #define SIZE 10000 int arr[SIZE]; int top = 0; int push(int x) { if (top >= SIZE) return 0; arr[top++] = x..

    [C언어] LIS (Longest Increasing Subsequence) 최장 증가 수열 DP/binary search

    [C언어] LIS (Longest Increasing Subsequence) 최장 증가 수열 DP/binary search

    LIS : 어떠한 수열에서 오름차순으로 증가하는 가장 긴 부분 수열. 부분수열의 각 수는 서로 연속할 필요는 없다 LIS 길이 구하기 : 가장 단순한 방법은 완전 탐색을 하는 것이다. 수열의 개수가 K개 -> 1개 이상의 원소를 갖는 부분 수열의 가짓수는 2^K 즉, 모든 부분 수열을 확인해 오름차순으로 정렬되어 있는지 확인하는 것은 매우 비효율적이다. 이를 개선하기 위해 다이나믹 프로그래밍으로 구현 가능하다. #1 DP(Dynamic Programming) 시간 복잡도 : O(n^2) 수열의 한 원소(k)에 대해, 그 원소에서 끝내는 최장 증가 수열 길이를 저장한다. => k를 제외한 모든 원소는 k보다 작아야 한다. 따라서 k의 앞 순서에 있는 모든 원소들 중 값이 k보다 작은 원소에 대해, 그 각각..