분류 전체보기 264

[자료구조] 링크드 리스트(C++)

C++ 역시 C언어로 구현한 링크드리스트와 비슷하다. 이전에도 말했듯이 아주 중요한 구조이다. 12345typedef struct Node { int val; Node *next;}node; cs 그렇다면 C++클래스로 어떻게 적용시킬까? 이전 게시물에서 간단하게 표현하였지만, 실제 적용되는 구조를 알아보자 1234567891011typedef struct Node { int val; Node *next;}node; class list {private: node* head; // 첫 노드 node* tail; // 마지막 노드 node* New; // 노드 생성용 node* pos; // 확인용(이동)cs 이렇게 클래스 맴버변수에 node포인터 타입을 가지도록 한다. 각 node포인터의 역할을 주석으로 ..

C , C++, C# 2019.02.20

[자료구조]링크드리스트 삽입 삭제 (C언어)

단일 링크드 리스트에 의기본 구조를 꼭 알고 가자 1234typedef struct list { list *next; int val;};cs 이것을 가지고 동적으로 메모리를 할당하고 '->'연산자를 이용하여 리스트를 형성할 수 있다. 그렇다면 이 list를 삽입, 삭제하는 코드를 보자 요정도 내용까지는 우리가 짚고 넘어갈 수 있으면 좋다. 코드를 보고 따라해보면서 눈과 머리 그리고 손으로 익히도록 하자. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899..

C , C++, C# 2019.02.20

[자료구조] C/C++ 단일 링크드리스트

친구를 통해 링크드리스트에 대한 이론과 한번쯤은 직접 만들어보라고 조언해 준적이 있다. 우선 링크드리스트가 무엇인지는 위키백과를 참고하였다. 링크 : https://ko.wikipedia.org/wiki/%EC%97%B0%EA%B2%B0_%EB%A6%AC%EC%8A%A4%ED%8A%B8 이곳에서 단일 링크드 리스트에 대해 살펴보자. 정리하면, 각 노드가 데이터(값)와 다음노드나 이전노드를 연결하는 포인터를 가지고 있는 자료구조이다. 특징은 자료의 추가와 삭제가 O(1)이며 동적할당을 통해 연속적인 기억장소 할당이 필요하지 않지만 특정데이터를 검색하는데 O(n)의 시간이 걸린며 포인터의 사용으로 저장공간의 낭비가 있다. C / C++의 단일 링크드리스트의 코드를 보며 살펴보자. 자세한 내용은 아래 출처에서..

C , C++, C# 2019.02.19

c++ 기본 : 계좌관리 프로그램

이번 글은 C++의 클래스와 배운것들을 종합하여 이해하기 위해 코드를 보며 계좌관리 프로그램이 어떻게 돌아가는지 확인해보자 이 코드의 출처는 https://koocci.github.io 이다. 약간의 변수이름 변경과 주석을 통해 우리가 클래스를 통해 어떻게 프로그램이 흘러가고 생성자 및 소멸자 그리고 데이터의 이동과 기능이 동작하는 방식을 이해하는것에 중점을 두면 좋을 것 같다. 생성자와 소멸자 맴버함수에 출력문을 만들어 확인한다면 어떻게 동작이 흘러가는지 알 수 있는 좋은 방법이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666..

C , C++, C# 2019.02.18

C++ 복습 : const static

오늘은 예전에 배운 C++의 내용에 대해 다시 공부했다. 취준을 하면서 많이 보고 필요한 내용이지만 정작 몇일 지나면 잊어버린다. 이런일을 방지하고자 이 추적에다 글을 남겨야겠다. 우선 이분의 블로그를 보고 나에게 필요한것만 정리하였다. *자세한 내용은 이 링크를 타고 확인할 수 있다.* 링크 : https://koocci.github.io/ const : 값이 변경되거나 수정할 수 없다. 선언과 동시에 초기화!!언제? 사용할까?? 1: 함수내에서 맴버변수에 저장된 값을 변경하지 않을때 2: const함수 내에서 const가 아닌 함수호출 제한 EX) set() const , get() const this -> 함수의 파라미터값이 아닌 맴버변수를 사용할때 객체의 주소를 첨조하는 참조자 member Ini..

C , C++, C# 2019.02.18

백준[14500] 테트로미노

삼성 SW역량테스트 문제이다. 링크 : https://www.acmicpc.net/problem/14500 5개 모양의 블럭중 하나를 적절히 놓아 2차원 배열의 칸에 쓰인 수의 최대합을 구하는 문제이다. 이 문제는 회전,대칭에서 5개모양의 블럭이 총 19개의 모양을 가질수 있음을 알고 접근하면 된다. 필자는 이 19개 모양을 모두 탐색하는 방법을 사용하였으며, 한 좌표에서 그 모양이 가능한지를 확인하고 가능하면 최대값들을 갱신시켰다. 그리고 확인한 19개의 모양을 토대로 최대값을 출력하였다. *코드가 깔끔하지 않고 전형적인 탐색방법을 사용해서 구현이 복잡하다, 이것이 최적의 답이 아니고 다른 방법도 존재한다.* 1234567891011121314151617181920212223242526272829303..

백준[14501] 퇴사

삼성 SW역량테스트 문제이다 링크 : https://www.acmicpc.net/problem/14501 이 문제는 DP로도 풀수있고 점화식이 잘 안보인다면 재귀탐색으로 해결할 수 있다. 시간과 값이 있을 때, 가능한 최대값을 구하는 문제이다. 필자는 DP로 푼 답은 이해가 잘 가지않고 점화식도출이 쉽게 되지않아 재귀를 사용하여 해결하였다. N+1일째 결과를 return하는것이 중요하다. 123456789101112131415161718192021222324252627282930313233#include#include#include#include#include#include#include#include#include using namespace std; int n, arrt[16], arrp[16],an..

백준[14502] 연구소

삼성 SW역량테스트 문제이다. 링크 : https://www.acmicpc.net/problem/14502 BFS를 통해 2차원 배열에서 영역의 최대값을 구하는 문제이다. 단, 문제조건은 벽을 3개 세웠을때 나타나는 영역의 최대값이다. 그렇다면 3개의 벽을 어떻게 처리할까? 사람은 적당히 이 위치라고 지정할 수 있겠지만 프로그램은 모든 경우를 탐색해야한다. 즉 3중 반복문을 사용해서 벽을 세울 수 있는 곳에 3개의 벽을 설치하고 그때, BFS탐색을 돌려 최대값이 얼마인지 계속 갱신해가며 답을 구할 수 있다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960..

백준[14888] 연산자 끼워넣기

삼성 SW역량테스트 문제이다. 링크 : https://www.acmicpc.net/problem/14888 순열을 사용한 모든 경우를 탐색하면 해결할 수 있다. 자료를 저장해서 어떻게 순열을 해야할지가 중요할 수 있다. 필자는 한배열에 각 연산자를 모두 저장하였으며 0 , 1, 2, 3 을 각각 더하기, 빼기, 곱하기, 나누기로 생각하여 입력에서 받은 모든 갯수를 한 배열에 순서대로 저장하였다. 이 저장값을 기본으로 나올 수 있는 모든 순열에따라 계산을 진행하여 최대값과 최소값을 갱신하여 답을 구하였다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061..

백준[14889] 스타트와 링크

삼성 SW역량테스트 문제이다. 링크 : https://www.acmicpc.net/problem/14889 DFS조합 문제이다. 가능한 조합으로 팀을 만들어 만든 두 팀의 차가 최소가 되는 값을 구하는 문제이다. 이때까지 해왔던 DFS조합으로 팀을 선별하여 두 팀의 합을 구하고 차이를 구하면 되지만, 한가지 유의할 점이 있다. N=4 이며 4개의 팀이 있다고 가정하자. visit배열을 통해 방문체크를 하며 조합을 두 팀으로 구성할때, 나올 수 있는 경우는 0 0 1 10 1 0 10 1 1 0 1 0 0 11 0 1 01 1 0 0 여기서 알 수 있는 것은 '0 0 1 1' 경우나 '1 1 0 0' 경우가 같다는 것에 주의해야 한다. 이것에 유의하며 탐색을 진행해야한다. 123456789101112131..