본문 바로가기

C++

(69)
path 전역 배열, n차원 배열 path 전역 배열 재귀 호출 시 경로를 추적하기 위해 path 배열을 사용한다. 현재 시점이 어디인지도 정확히 알 수 있다. 과정 1. 진입할 노드를 path 배열에 기록한다. 2. 다음 level 재귀 호출 3. path 배열 기록 지우기 level = 3 일 때 경로를 출력하기 #include using namespace std; char path[3]; void run(int level) { if(level == 3) { cout
함수 오버로딩, public & private 함수 오버로딩: 같은 이름의 함수를 사용할 수 있음. 대신 인자로 구분이 가능해야 한다. private : 사용자는 호출 할 수 없지만 제작자는 호출 할 수 있음. ( 캡슐화한다고 생각하면 됨) public : 사용자에게도 공개하는 부분 class는 아무것도 명시하지 않으면 private이다. 그러나 struct는 default가 public이다. 재귀함수 사용 9 8 7 6 5 4 3 2 1 도착 1 2 3 4 5 6 7 8 9 순으로 출력하기 #include using namespace std; void run(int level) { cout
클래스, 재귀함수 클래스는 재사용성이 뛰어나다. 항상 그것을 염두해둬야 한다. 간단한 클래스 작성하기 #include using namespace std; class zergling{ public: int hp; void run() { cout
Direct offset 배열, 구조체, 2차원 배열에서 패턴찾기 Direct 코딩 기법 한 좌표를 입력받고 위, 아래, 오른쪽, 왼쪽 합을 구하라. direct라는 offset 배열을 사용하여 합을 구함 #include using namespace std; int arr[4][4] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 }, direct[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1}; int main() { int y, x, sum = 0; cin >> y >> x; for(int i=0; i 3 || dx > 3) continue; sum += arr[dy][dx]; } cout > y >> x; for(int i=0; i 2 || dx > 2) continue; sum += arr[dy][dx];..
문자열 속 패턴 찾기, DAT(Direct Address Table) 문자열 속 패턴 찾기 배열에 Pattern 존재 여부 판단은 Flag와 함수 쓰는 법 두가지 있다. 함수 사용 #include using namespace std; char vect[10] = "BTABCQABC", pattern[4]; int isPattern(int index) { for(int i=0; i> pattern; for(int i=0; i
1676번: 팩토리얼 0의 개수 https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제를 너무 간단하게 생각했다. 팩토리얼 구한 뒤 0의 갯수를 체크하려 하였는데 당연히 500!같이 큰 수의 경우 시간초과가 났다. 그래서 규칙을 찾아보았다. 접근은 좋았으니 5의 갯수를 세어야 하는데 5로 나눈 몫을 구했다.. 25와 125같은 경우만 처리하면 되는줄 알았는데 50, 75, 100, 등등 너무 많은 수가 있었기에 이것 또한 불가능하였다. 결국 문제의 핵심은 2를 몇 번 곱하였고 5를 몇 번 곱하였는지를 계산하여 10을 곱한 횟수를 통해 0의 갯수를 세는 것이다. 하..
11866번: 요세푸스 문제0 먼저 원형 큐를 구현한 뒤 그 안에서 첫번째 자리를 삭제하는 경우와 이 외의 경우로 나누어 풀이를 작성하였다. 이 문제를 풀기 전에 큐에 대해 공부한 뒤, 단방향 연결리스트로 큐를 구현이 가능하다면, 원형 큐를 구현한 뒤 접근하면 매우 쉽게 풀린다. 놓친 점 : 첫번째 수를 빼는 경우를 고려하지 않아서 오류가 났었다. 그리하여 경우를 두가지로 나누어 삭제를 진행하였다. 또한 삭제의 경우 head = head->next; 와 같이 작성한 적이 많은데 이 경우 메모리 누수가 발생하고 n이 커지면 무수한 손실이 발생하여 delete를 사용하여 꼭 해제해주어야 한다. #include using namespace std; struct Node{ int num; Node *next; }; Node *tail, *h..
비트배열과 다중 카운트 비트배열이란? 1과 0만 들어있는 배열로 원하는 값만 뽑아 내기 위해 필요없는 값을 거르는 필터로 사용 가능 #include using namespace std; int mask[5] = {1, 0, 1, 1, 0}; int main() { int data[5] = {1, 2, 3, 4, 5}; for(int i=0; i
length() 사용하지 않고 문자열 길이 구하여 배열 속 요소 카운트하기 큰 문제를 작은 문제로 나누어서 하나씩 설계하여 해결하도록 하는 것이 좋다. 1. To do list 작성 2. 함수로 뺄 수 있는 거 빼기 3. 시뮬레이션 하기 1. 문자열 중 특정 인덱스를 제거하는 방법 설계 제거에 집중하기 보다 그냥 바로 전 인덱스부터 하나씩 앞으로 땡겨주면 된다. 따라서 t를 제거하기 위해 3번 인덱스부터 마지막 인덱스까지 순서대로 앞으로 이동시켰다. #include using namespace std; char arr[10]; int leng() { for(int i=0; i> arr; for(int i=2; i