프로그래밍에서 변수는 데이터를 저장할 수 있는 공간을 의미합니다. 정수, 실수, 문자열 등 다양한 형태의 데이터를 저장할 수 있습니다. 예제를 통해 실제 어떻게 변수가 활용되는지 살펴봅시다. #include int main() { int num; // 정수(int) 형태의 num 이라는 이름의 변수 선언한다. num=10; // num에 10이라는 값을 저장한다. = 는 대입 연산자이며 오른쪽 값을 왼쪽 변수에 저장하는 역할을 한다. printf("%d\n",num); // printf 함수에서 서식문자를 지정해서 num에 저장된 값을 출력할 수 있다. 10 int a,b; // 여러 변수를 동시에 선언할 수도 있다. int c=20,d=30; // 변수 선언과 동시에 값을 할당할 수 있다. printf..
https://algospot.com/judge/problem/read/FENCE algospot.com :: FENCE 울타리 잘라내기 문제 정보 문제 너비가 같은 N개의 나무 판자를 붙여 세운 울타리가 있습니다. 시간이 지남에 따라 판자들이 부러지거나 망가져 높이가 다 달라진 관계로 울타리를 통째로 교체 algospot.com 각각의 높이가 다른 울타리에서 최대 넓이의 직사각형을 찾는 문제이다. 여러 방법으로 풀 수 있지만 여기서는 분할 정복으로 풀어보도록 하자. 전체 판자를 절반으로 나눈다고 하자. 그러면 우리가 찾는 최대 직사각형은 다음 세 가지 중 하나에 속한다. 1. 가장 큰 직사각형을 왼쪽 부분 문제에서만 잘라낼 수 있다. 2. 가장 큰 직사각형을 오른쪽 부분 문제에서만 잘라낼 수 있다. 3..
https://algospot.com/judge/problem/read/QUADTREE algospot.com :: QUADTREE 쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적 algospot.com 문자열을 가리키는 포인터를 하나씩 뒤로 옮겨가면서 재귀호출한다. 분할한 부분의 전체가 흰색이거나 검은색일 경우 뒤집어도 똑같은 패턴이므로 그대로 리턴한다. 그게 아니라면 다시 분할한다. 위와 아래 조각들이 바뀐 패턴이 최종 결과이다. #include #include using namespace std; string reverse(string::itera..
https://algospot.com/judge/problem/read/CLOCKSYNC algospot.com :: CLOCKSYNC Synchronizing Clocks 문제 정보 문제 그림과 같이 4 x 4 개의 격자 형태로 배치된 16개의 시계가 있다. 이 시계들은 모두 12시, 3시, 6시, 혹은 9시를 가리키고 있다. 이 시계들이 모두 12시를 가리키도록 algospot.com 각각의 스위치들과 연결된 시계가 있다. 스위치를 누를때마다 시간이 3시간 흐른다. (12->3->6->9) 이 때 모든 시계를 12시로 돌리기 위해 스위치를 최소 몇 번 눌러야 할지 계산해야한다. 먼저 스위치를 4번 누르면 다시 원상태로 돌아온다. 그러므로 스위치를 안 누르거나 최대 3번 누르는 것으로 한정시킬 수 있다..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/EJIRX/btq6DSPDujw/KyHZJ3L9K8ERkqvJ0iFCLk/img.png)
https://algospot.com/judge/problem/read/BOARDCOVER algospot.com :: BOARDCOVER 게임판 덮기 문제 정보 문제 H*W 크기의 게임판이 있습니다. 게임판은 검은 칸과 흰 칸으로 구성된 격자 모양을 하고 있는데 이 중 모든 흰 칸을 3칸짜리 L자 모양의 블록으로 덮고 싶습니다. 이 algospot.com 완전탐색 문제이다. 그런데 경우의 수를 어떻게 중복없이 체계적으로 셀 수 있을까? 순서를 강제하면 된다. 게임판의 빈 부분을 좌상단부터 하나씩 채워나간다. 이 때 모든 빈 부분이 덮어지면 경우의 수를 하나 더해준다. 아래 그림에서 별표 부분을 덮는다고 가정하자. 이 때 별표 왼쪽 부분까지는 다 채워져 있다. 그러면 L자 모양의 블록을 덮는 경우가 4가..
https://algospot.com/judge/problem/read/BOGGLE algospot.com :: BOGGLE 보글 게임 문제 정보 문제 보글(Boggle) 게임은 그림 (a)와 같은 5x5 크기의 알파벳 격자인 게임판의 한 글자에서 시작해서 펜을 움직이면서 만나는 글자를 그 순서대로 나열하여 만들어지는 영어 algospot.com cache[x][y][idx]를 이용해서 현재 위치 (x,y)에서 idx까지 탐색했을 때 중복 탐색 여부를 확인해준다. 그러면 탐색 가지수를 줄일 수 있다. #include #include int t,n,len; char map[7][7],s[15]; int cache[5][5][10]; int dx[8]={-1,-1,-1,0,0,1,1,1}; int dy[8]..
0~n-1까지 n개의 원소가 있을 때 그 중 m개를 고르는 모든 조합을 출력한다. n: 전체 원소 수 picked: 지금까지 고른 원소들의 번호 toPick: 더 고를 원소의 수 #include #include using namespace std; void printPicked(vector picked) { for(int i : picked) printf("%d ",i); printf("\n"); } void pick(int n,vector& picked,int toPick) { if(toPick==0) { printPicked(picked); return; } int smallest=picked.empty()?0:picked.back()+1; for(int next=smallest;next
처음 프로그래밍을 배우는 사람들을 위한 C언어 개념 강의를 포스팅하고자 합니다. 최대한 간결하게 서술하지만 핵심 내용은 모두 이해할 수 있게끔 작성할 것입니다. C언어는 프로그래밍 언어 종류 중 하나입니다. 프로그래밍 언어란 사람과 컴퓨터 간의 의사소통이 가능하게끔 하는 매개 수단이라고 볼 수 있습니다. 사람이 프로그래밍 언어로 코드를 작성하면 컴파일러(compiler)가 코드를 기계어로 번역하여 컴퓨터에 전해줍니다. 기계어는 0,1로 구성되어 있는 언어체계를 의미합니다. 즉, 요약하자면 프로그래머가 특정 의도를 가지고 코드를 작성하면 컴파일러를 통해 컴퓨터로 해당 코드를 번역해서 전해주고 실행하는 것이라 볼 수 있습니다. 프로그램 작성 -> 컴파일 -> 링크 -> 실행파일 생성 이제 프로그래밍을 하기 ..
https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같다. www.acmicpc.net d[x][y] = x번째 행렬부터 y번째 행렬까지 곱했을 때 곱셈 연산의 최소값 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include int n,a[500][2],d[500][500]; int go(int x,int y) { if(d[x][y]) return d[x][y]; if(x==y) ..