분류 전체보기 169

[C++] 프랜드 함수

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션) https://wowon.tistory.com/125 프랜드 함수란 무엇인가? ▶ C++에서는 크게 세 가지의 접근 지정자가 있다. 모든 곳에서 사용이 가능한 public, 클래스 내부와 상속받은 클래스에서 사용 가능한 protected, 그리고 선언된 클래스 내부에서만 선언이 가능한 private. ▶ 프랜드 함수는 다른 클래스에서는 사용할 수 없는 private 형의 멤버를 사용할 수 있도록 해주는 함수이다. ▶ 프랜드 함수로 초대되는 3가지 유형이 존재한다. 1. 클래스 외부에 선언된 전역함수 2. 다른 클래스의 특정 멤버 함수..

[C++] 생성자와 소멸자

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션) 생성자 (Constructor)란 무엇인가? ▶ 클래스는 생성자라는 멤버함수를 사용해서 객체를 초기화시켜준다. 복잡한 구조를 가져서 클래스에 일일이 대입하는 거이 곤란하므로 멤버에 값을 부여하는 일을 생성자가 한꺼번에 처리하여 준다. ▶ 생성자는 클래스의 이름과 동일한 이름을 가진 함수이다. ▶ 생성자는 객체가 만들어질 때 자동적으로 호출되어 객체를 초기화 시키는 역할을 한다. 생성자를 이용한 객체 초기화 예제 아래와 같은 소스코드를 보자 이 소스코드에서의 생성자라고 할 수 있는 Hello()메소드를 보면, int형의 num, 그리고..

[C++] 포인터 변수 (feat. * / & / **)

포인터 변수란 무엇인가? ▶ 포인터변수란 data가 저장되어있는 메모리의 시작주소를 값으로 갖는 변수이다. ▶ 와 같은 형식으로 선언한다. ▶ 주소를 얻어오기 위해서는 '&' 연산자를 변수 앞에 붙인다. ▶ 주소가 주어졌을 때, 그 주소가 가리키는 곳의 값을 얻어오기 위해서는 *연산자를 사용한다. #include using namespace std; void main() { int x = 100; int *xp = &x; // 포인터 변수 xp에 x가 저장되어있는 메모리의 시작 주소값을 저장합니다. cout

[한양대] 2020 자연계열 오후 1

문제 1-1 Explanation => 이항정리를 잘 계산할 수 있는가를 물어보는 문제이다. 반성 : 구하고자 하는 것이 확률이기 때문에 n개 중에 k번 발생할 때의 그 순서도 고려를 해야 한다는 점을 깊게 생각하지 못하였다. + 이항정리를 생각하지 못해 짝수일 때와 홀수일 때로 나누어서 답을 구하였다. 문제 1-2 Explanation => 기댓값을 묻는 문제인 것 같으나 사실상 얼마나 이항정리를 잘 활용하여 식을 깔끔하게 정리할 수 있는지를 묻는 문제이다. 반성 : 일단 여기서도 1-1번과 같이 3의 눈이 나오는 횟수에 대한 "순서"를 고려하지 않았다. 그리고 식이 복잡하여 깔끔하게 정리하지 못하였다. 이 부분은 이항정리에 대해 익숙해지고, 많이 사용해봐야겠다. 문제 1-3 Explanation =>..

[C++] 포맷 플래그

출처 => C++ How to Program (Detitel / Prenticehall) 포맷 플래그란? 포맷 플래그의 종류는? ▶ 포맷플래그는 C언어에서의 printf().와 유사한 역할을 한다. 포맷 입출력 방법에는 3가지가 있는데 포맷 플래그, 포맷 함수, 그리고 조작자 이다. 이 세 가지에 대하여 오늘은 알아보려고 한다. 1-1. 포맷 플래그 ▶ 입력스트림에서 입출력 형식을 지정하기 위한 플래그이다. ios클래스에서 정의된 포맷 플래그는 아래의 표와 같다. 그리고 아래에 있는 표는 포맷 플래그를 세팅하는 멤버함수들이다. setf()메소드는 플래그를 실행하는 역할, unsetf()메소드는 플래그 실행을 해제하는 역할을 한다고 보면 된다. cout.unsetf(ios::dec) cout.setf(io..

[C++] vector Container

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션) 배열 vs Vector 차이점 비교 Vector 클래스의 주요 멤버와 연산자 Vector를 이용한 예제 1. vector 컨테이너 활용 예제 #include #include using namespace std; void main() { vectorv; //정수만 삽입 가능한 벡터 생성 v.push_back(1);//벡터에 정수1 삽입 v.push_back(2);//벡터에 정수2 삽입 v.push_back(3);//벡터에 정수3 삽입 for (int i = 0; i < v.size(); i++) { cout

[acmicpc] 두더지 굴 (feat. 깊이우선탐색 알고리즘) / C++

출처 => [알고리즘 해결을 위한 창의적 알고리즘 해결 (중급)] 문제 문제 분석 문제의 의도: 단순 비선형 탐색이 아니라, 두더지 굴을 나타내는 숫자인 1을 중심으로 상,하,좌, 우에 1이 있다면 이 부분에 간선이 있는 것으로 생각한다. (0,0)에서 순차 탐색을 하여 그 값이 1이라면 그 점을 중심으로 깊이우선탐색을 하여 모든 연결된 점을 방문한다. 풀이 이런 식으로 마지막 칸까지 진행을 한다면 다음과 같은 결과가 나온다. => 따라서 각 굴의 크기는 7, 8, 9라는 사실을 알 수 있다. 소스코드 & 결과 #include #include using namespace std; int n, A[101][101], cnt, Size[101]; void input() { cin >> n; for (int ..

[acmicpc] upper bound (feat. 이진 검색 알고리즘) / C++

출처 => [알고리즘 해결을 위한 창의적 알고리즘 해결 (중급)] 문제 문제 분석 문제의 의도 : k를 초과하는 가장 첫 번째 원소의 위치를 구하는 것 ① 먼저 구간을 설정한다. ([s, e]) ② 이 구간의 중간위치의 값을 m이라고 하면, A[m-1]k 인 최소 m을 찾아야 한다. 풀이 => 예시로 주어진 배열 A는 1,2,7,7,7,7,11,15이다. k의 값은 7이다. 따라서 출력값은 7이 나와야 한다. => 주어진 배열은 [0,8]이고 이에 따라 중간값의 위치인 m은 4이다. 우리가 원하는 것은 찾으려는 값의 위치가 아니라 k값보다 큰 수가 처음으로 등장하는 위치이다. A[4]=7이므로 우리의 위치와 일치하지 않다. => A[6]>7 이므로 그보다 아래로 범위를 설정하여 재탐색 =>A[5]=7이므..

[C++] C++에서의 배열 선언

JAVA에서의 배열 선언 나는 프로그래밍 언어를 JAVA로 시작하였기 때문에 JAVA가 편하다. 그래서 C++을 사용할 때 헷갈려서 불편하곤 한다. 특히 '배열'을 선언할 때 불편하다. 먼저 JAVA에서의 배열 선언이다. int [] Array =new int [3]; 만약 배열의 크기가 정해지지 않았다면 다음과 같이 설정하면 된다. Scanner scan=new Scanner (System.in); int n=scan.nextInt(); int [] Array = new int [n]; 2차원 배열도 위의 방법과 같이 생성 할 수 있다. Scanner scan=new Scanner(System.in); int m=scan.nextInt(); int n=scan.nextInt(); int [][] Arr..