Old (2021.01 ~ 2021.12)

이 문제는 6주차 때 이미 풀었던 문제지만 비효율적으로 입력 최대 크기(100 100)만큼 배열을 생성해서 풀었고 또한 잘못 이해를 해서 푼 부분이 있기에 포인터와 동적할당을 이용한 방법과 올바르게 풀고자 선정하였다. 입력된 격자판의 세로, 가로, 막대의 개수, 막대의 길이, 방향, 좌표(x,y)를 바탕으로 격자판에 막대들을 둔 상태로 격자판을 출력하는 것이 목적이다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int **board; // 격자판 배열 int xCount, yCount, count, len, direct, x, y; // xCount : 격자판 가로 yCount : 격자판 세로 count : 막대의 개수 len : 막대..
문자열과 시작 위치, 끝 위치가 입력된다. 입력 받은 문자열에서 시작 위치 ~ 끝 위치까지 출력하는 것이 목적이다. 단 배열 대신 동적 메모리 할당 방법(malloc, free)를 사용해서 풀어야한다. 배열이 안되니 배열 포인터를 만들어서 풀면 될 것 같다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int a, b; // 시작 위치 끝 위치를 입력 받을 변수 char *p = malloc(sizeof(char) * 100); // malloc으로 char의 크기 * 100만큼 메모리를 할당한 후 그 주소를 포인터 p에 저장 scanf("%s", p); scanf("%d %d", &a, &b); // 문자열을 p의 주소에 저장, 시작 ..
두 수를 a, b 변수에 입력 받은 후 void형 myswap 함수를 작성해 a의 값이 b 값보다 크다면 두 변수의 값이 서로 바뀌도록 하는 것이 목적이다. myswap 함수를 작성해야하는데, 주어진 코드를 보면 myswap의 인자로 변수의 값이 아닌 변수의 주소가 주어진다. 이 주소를 포인터로 입력 받아 역참조해 값을 서로 바꿔주면 될 것 같다. #define _CRT_SECURE_NO_WARNINGS #include void myswap(int *A, int *B) { // int형 포인터 매개변수 A, B로 a, b의 메모리 주소를 전달 받음 if (*A < *B) return; // 역참조로 A가 가리키는 주소의 값이 B가 가리키는 주소의 값보다 작은지 확인하고 작으면 함수 종료 int tmp =..
-keyword- 1, 2, 3차원 배열, 1, 2, 3차원 배열 포인터, 다차원 배열 포인터 메모리 동적 할당 Unit 36. 배열 사용하기 -배열(Array)- c언어의 배열은 파이썬의 list와 비슷한 기능을 한다. 여러 값들을 한 변수에 저장하는 것이다. 파이썬과 똑같이 0부터 시작하는 인덱스를 갖고 여러 개의 값을 한 변수에 사용이 가능하다. 단 파이썬과 달리 c언어에서의 배열은 같은 자료형의 값들만 저장할 수 있다. 이 배열은 파이썬과 비슷하게 반복문으로 값을 한꺼번에 저장하거나 빼낼 때 주로 사용한다. 앞서 코드업에서 바둑판, 격자판 등도 이 배열을 이용해서 풀었다. 사용은 [] = {};로 한다. 꼭 배열을 선언하자마자 크기만큼 값들을 넣어줄 필요 없이 선언만 하고 나중에 값들을 넣어줘도 ..
// 날짜 대신 Unit 명을 써주고 문제들은 맨 아래에 모아서 풀이를 적어봤습니다. -keyword- 포인터, 역참조, 메모리 할당, malloc, free, 스택, 힙, memset Unit 34. 포인터 사용하기 -포인터(pointer)- 포인터란 c언어에서 메모리 주소값을 저장하는 변수다. 포인터 변수라고도 부른다.(참고 : tcpschool) int a = 1; 위는 간단하게 1로 초기화되는 int형 변수 a를 선언한 코드다. 사실 변수를 선언했을 때 마법처럼 짠하고 변수가 생성되는게 아닌 컴퓨터의 메모리에 일정 공간을 확보해서 그 공간에 변수의 값을 저장하고 가져오는 것이다. 이 메모리에서 해당 변수의 주소(위치)를 메모리 주소라고한다. 즉 위 int a = 1;이라는 코드가 실행될 때 컴퓨터..
-Summary- CodeUp 11문제(1081번, 1082번, 1091번 ~ 1099번) c언어 풀이 Write Up -1081- 주사위 2개의 면의 개수가 입력되는데, 그 입력을 바탕으로 나올 수 있는 모든 수의 조합을 출력하는 것이 목적이다. #define _CRT_SECURE_NO_WARNINGS // 취약한 scanf 함수를 오류 없이 사용하기 위해 작성 #include int main() // 메인 함수 { int m, n; // 입력 값을 담을 변수 선언 scanf("%d %d", &m, &n); // 입력 for (int i = 1; i
-Summary- 연산자 우선 순위, switch for while do while 반복문, break continue, 계단식 별 출력, goto, FizzBuzz 02-19 (Unit 24.1 ~ Unit 27.12) -2의 거듭제곱- 시프트 연산자를 사용한다면 2의 거듭 제곱을 빠르게 구할 수 있다.(아마 컴퓨터 입장에서 연산하기 쉬운 2진수로 연산해서 그런 것 같다.) **으로 제곱 연산을 할 수 있는 파이썬과 달리, math.h를 include하지 않는 이상 c언어는 거듭제곱 연산자를 제공하지 않으므로, 이 시프트 연산자를 이용해서 거듭제곱을 하면 된다. 위 코드처럼 1을 왼쪽으로 지수만큼 시프트 연산을 수행하면 해당 지수만큼 2가 거듭제곱되서 출력된 것을 볼 수 있다. 2^2 = 1 2 같은 ..
-Summary- 사칙 연산, 증감 연산자, 자료형 확장-축소, if else if else 조건문, 비교 연산자, bool 자료형, 비트 단위 연산자 02-17 (Unit 12.1 ~ Unit 19.5) -+, -- +, -는 파이썬과 동일하게 더하고 빼주는 기능의 연산자다. + - 이런식으로 써줄 수 있고 이런식으로 변수끼리의 연산도 가능하다. 또한 = - 또는 = + 이라면 파이썬에서 배웠던 것 처럼 +=, -=으로 줄여쓸 수 있다. += -= 이런식으로 +, -를 이용해 값과 변수끼리 플러스 마이너스 연산이 가능하다. 실수도 역시 동일한 방법으로 가능하다. 값이나 변수를 더할 때는 = + 로 써주면 된다. b : num1과 더할 값이 없다. + num1이 되야한다. X 답 : b num1의 값을 ..
-Summary- c언어 배경지식, printf 함수, c언어 기본 문법, 변수, 정수-실수-문자 자료형, 상수, scanf 함수 02-15 (Unit 1.1 ~ Unit 6.1) //Unit 1.1 ~ Unit 3.2까지는 파이썬 코딩도장과 겹치는 부분도 있고, 환경 구성 부분이라 중요한 부분 빼고는 생략했습니다. -c언어의 역사- c언어는 1972년 켐 톰슨과 데니스 리치가 유닉스 운영체제를 만들기 위해 고안한 프로그래밍 언어다. 메모리와 하드웨어를 직접 제어할 수 있다는 특징이 있다. 이 때문에 Windows, Linux, Android, iOS 운영체제의 커널은 c언어로 만들어져 있다. 운영체제 말고도 Oracle, MySQL 등의 데이터 베이스도 c와 c++로 만들어져 있고, 에어컨, 세탁기 등..
-Summary- try except else finally 예외처리, iterater-iteraterble, 정규 표현식 02-12 (Unit 38.1 ~ Unit 38.7) -exception(예외) 처리- 예외 처리란 예외가 발생했을 때, 실행을 중지하지 않고 계속 실행하게 해주는 것이다. -exception(예외) 예외란 코드를 실행하는 도중에 발생한 에러를 뜻한다. 첫 번째 2/0은 ZeroDivisionError(0으로 나눠져서 생기는 에러) exception을 일으키고, 두 번째는 ValueError exception을 일으킨다. ZeroDivisionError, ValueError 등 실행 중에 발생하는 에러는 모두 예외에 해당된다. -try, except try, except는 예외 처리..
dyp4r
'Old (2021.01 ~ 2021.12)' 카테고리의 글 목록 (4 Page)