함수가 return 되기전에 그 함수를 다시 재 호출 하는 것을 재귀 라고 한다. 재귀는 나중에 DFS (깊이우선탐색) 알고리즘과 DP 등과 연결되어 있어서 개념을 잘 숙지해야하며 활용할 수 있어야 한다. 가장 대표적으로인 재귀함수와 팩토리얼 을 함수의 재귀 호출로 값을 구해보는 시간을 가졌다. void recall(int n) { if (n == 1) { printf("%d end", n); return; } printf("%d\n", n); return recall(n - 1); } 기본적인 재귀 함수 int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } 재귀함수는 재귀의 탈출조건인 base ca..

# 문제 https://www.acmicpc.net/problem/1012 입력 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다. 두 배추의 위치가 같은 경우는 없다. 출력 각 테스트 케이스에 대해 필요한 최소의 배추흰지렁이 마리 수를 출력한다. # 나의 풀이 전에 풀었던 Number of Island와 같은 문제다 그래프의 너비우선탐색 (bfs) 와 깊이우선탐색(dfs)를 ..

# 코테 인프런 강의 https://www.inflearn.com/course/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%85%EB%AC%B8-%ED%8C%8C%EC%9D%B4%EC%8D%AC/dashboard 로봇이 m x n 격자 위에 있다 로봇의 처음 위치는 좌측 상단 모서리 grid[0][0] 에 위치해 있다 로봇은 우측 하단 모서리 grid[m-1][n-1]로 이동 하려 한다 로봇은 한번에 오른쪽이나 아래쪽으로만 움직일 수 있다. 두 정수 m과 n이 주어졌을 때, 로봇이 우측 하단 모서리에 도달할 수 있는 가능한 unique paths의 수를 반환하라 제약 조건 (1 = 0: unique_paths += dfs(r, c-1) memo[(r,c)..

# 문제 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. 출력 첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다. # 나의 풀이 - 접근 먼저 완전탐색으로 접근하였지만, 방법이 생각나지 않았다. 유튜브 강의를 통해 학습하였다. bottom - up 방식으로 2차원 dp 테이블을 채워나가는 것이 핵심이다. 여기서 처음으로 배운 것 1. 부분 문자열을 다른 표현방식으로..
# 문제 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 상관없이 묶을 수 있다. 하지만, 같은 위치에 있는 수(자기 자신)를 묶는 것은 불가능하다. 그리고 어떤 수를 묶게 되면, 수열의 합을 구할 때 묶은 수는 서로 곱한 후에 더한다. 예를 들면, 어떤 수열이 {0, 1, 2, 4, 3, 5}일 때, 그냥 이 수열의 합을 구하면 0+1+2+4+3+5 = 15이다. 하지만, 2와 3을 묶고, 4와 5를 묶게 되면, 0+1+(2*3)+(4*5) = 27이 되어 최대가 된다. 수열의 모든 수는 단 한번만 묶거나, 아니면 묶지 않아야한다. 수열이 주어졌을 때, ..
클래스의 맴버 변수는 참조 형식으로 선언할 수 있다. 참초자는 반드시 선언과 동시에 초기화 해야한다. 기억할 것 참조형 멤버는 반드시 생성자 초기화 목록을 이용하여 초기화 한다. #include using namespace std; class CRefTest { public : //참조형 멤버는 반드시 생성자 목록을 이용하여 초기화 CRefTest(int &rParam) : m_nData(rParam) { }; //CRefTest( int rParam) : m_nData(rParam) { }; //이 코드는 선언과 정의가 아니다. 인스턴스를 이용하여 연산한 것에 불과 //함수의 매개변수는 함수 내부의 자동 변수와 같으므로 함수가 반환될 때 매개변수는 소멸 // 따라서 m_nData(rParam)는 사라질..
생성자 construcor 소멸자 Destructor 는 클래스 객체가 생성 및 소멸 될때 "자동으로" 되는 함수이다. 두 함수의 가장 큰 특징 반환값이 없다. 함수이름이 클래스와 같다. (소멸자는 앞에~가 붙는다) 디폴트 생성자 Default constructor 클래스 제작자가 생성자와 소멸자를 기술하지 않아도 컴파일러가 자동으로 만들어 넣어준다. 즉 생성자와 소멸자가 없는 클래스는 없다. 객체가 생성되는 시점에 생성자 생성 메인함수의 실행이 끝나면 자동으로 소멸자 실행 여기서 C++가 C와 다른점 C로 작성된 프로그램은 main()함수가 가장먼저 호출됨 C++은 전역 변수로 선언한 클래스의 생성자가 main()함수보다 먼저 호출 생성자는 다중 정의가 가능하다. 소멸자는 다중 정의가 불가능하다.
접근제어 지시자를 사용하는 이유 사용자의 접근을 제한하여 시스템의 오류의 가능성을 차단 하는 것이다. 예를들어 스피커의 볼륨 수치의 최대수치가 제한되어 있는것 애플, 삼성의 스마트폰등의 제품을 분해를 규정상 차단하는것 = 사용자의 접근을 제한한다. C++의 접근제어지시자 public 맴버에 관한 모든 외부 접근이 허용 private 외부 접근뿐만 아니라 파생 클래스로부터의 접근까지 모두 차단, 클래스를 선언할 때 별도로 접근제어 지시자를 기술하지 않으면 private로 간주됨 protect 맴버에 관한 모든 외부 접근이 차단됨 단 , 상속 관계에 있는 파생 클래스에서의 접근은 허용. private 로 멤버변수의 접근은 차단되었지만 메서드를 이용하여 변수의 값을 변경할 수 있도록 할 수 있다. 즉 예를 들..
나는 항상 생각하는 것이 있다. '이유가 무엇일까?' 어떠한 행동 , 이론 , 정의든 그것이 존재하는 이유를 찾고자 한다. 이유를 찾으면 목적을 알 수 있고 목적의 유무로 그것을 대하는 태도가 바뀐다. 마찬가지로 사람들은 각자의 삶을 살아갈때 저마다의 목적과 이유가 있다. "나는 세상에 가치 있는 일을 하겠다." 이것이 내 삶의 1차적 목표이다. 현대 고도화로 발전된 사회에서 컴퓨터는 아주 중요한 역할을 한다. 그 컴퓨터의 많은 분야 중 왜 나는 프로그래밍을 배우고 있을까? 예전부터 나는 재미있는 게임을 만들고 싶었다. 프로그래밍을 하는것 자체가 내 꿈의 본질인 것이다. 그래서 나는 프로그래밍을 하고 있는 것이다. 서론이 길었다. 왜 절차지향적 프로그래밍을 뒤로하고 객체지향 프로그래밍을 하는 것일까? 객..
- Total
- Today
- Yesterday
- 완전탐색
- 파일 내용 찾기 프로그램
- 자료구조
- 재귀
- 백준
- dfs
- 그래프
- javascript
- os모듈
- 그래프 순회
- Bottom-up
- 알고리즘
- 파이썬
- 함수
- dp
- 골드5
- 다익스트라
- 메모리
- 힙
- deque
- JSON
- 브루트포스
- BFS
- 변수
- 시뮬레이션
- 덱
- 그래프 탐색
- 가중치 그래프
- C++
- 프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
28 | 29 | 30 |