전체 글 51

[명품 C++] 08 상속

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 블뎁블뎁 C++ 에서 상속 inheritance 클래스 사이의 상속, 객체 사이에는 상속 관계 없음 기본 클래스의 속성과 기능을 파생 클래스에 물려줌 base class - derived class 기본 클래스의 속성과 기능 + 자신만의 속성과 기능 파생 클래스로 갈수록 클래스의 개념이 쿠체화 다중 상속으로 클래스의 재활용성을 높임 자바는 다중 상속이 없고 인터페이스 개념이 있음 상속의 목적 및 장점 간결한 클래스 작성 클래스 간의 계층적 분류 및 관리의 용이함 상속은 클래스들의 구조적 관계 파악이 용이 하다 클래스 재사용과 확장을 통한 소프트웨어 생산성 향상 앞으로 있을 상속에 대비해 클래스를 객체 지향적으로 설계 해야함 다형..

[전공] 2022.06.06

[명품 C++] 07 프렌드와 연산자 중복

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 블뎁블뎁 프렌드 함수 클래스의 멤버로 선언하긴 좀 그렇고, 내부에 접근하게 만들고는 싶을 때 클래스의 멤버 함수가 아닌 외부 함수 클래스 외부에 선언된 전역 함수 다른 클래스의 멤버 함수 다른 클래스의 모든 멤버 함수 → 외부에서도 private 에 접근할 수 있게 된다. class Rect { // 전역 함수 equals()를 Rect 클래스에 프렌드로 선언 friend bool equals(Rect r, Rect s); }; class Rect { // RectManager 클래스의 equals() 멤버 함수를 Rect 클래스의 프렌드로 선언 friend bool RectManager::equals(Rect r, Rect s..

[전공] 2022.06.05

[명품 C++] 6장 함수 중복과 static 멤버

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 노션 공유를 원하시는 분은 댓글에 이메일 남겨주세요 함수 중복 함수 중복 function overloading 동일한 이름의 함수가 공존 - 다형성 polymorphism 함수 중복이 가능한 범위 보통 함수들 사이 클래스의 멤버 함수들 사이 상속 관계에 있는 기본 클래스와 파생 클래스의 멤버 함수들 사이 함수 중복 성공 조건 중복된 함수들의 이름 동일 중복된 함수들의 매개 변수 타입이 다르거나 개수가 달라야 함 리턴 타입은 함수 중복과 무관 int sum(int a, int b, int c) { return a + b + c; } double sum(double a, double b) { return a + b; } int su..

[전공] 2022.06.05

[명품 C++] 05 함수와 참조, 복사 생성자

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 노션 공유를 원하시는 분은 댓글에 이메일 남겨주세요 함수의 인자 전달 방식 값에 의한 호출 call by value 주소에 의한 호출 call by address 참조에 의한 호출 call by reference 값에 의한 호출 call by value 함수가 호출되면 매개 변수가 stack에 생성됨 호출하는 코드에서 값을 넘겨줌 호출하는 코드에서 넘어온 값이 매개 변수에 복사됨 #include using namespace std; void swap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int m = 2, n = 9; swap(m, n); // 값이 ..

[전공] 2022.06.05

[명품 C++] 04 객체 포인터와 객체 배열, 객체의 동적 생성

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 객체 포인터 객체의 주소 값을 가지는 변수 포인터로 멤버를 접근할 때 . 연산자 대신 - > 객체포인터 - > 멤버 Circle donut; double d = donut.getArea(); // p의 자료형은 Circle * Circle *p; // 객체에 대한 포인터 선언 p = &donut; // 포인터에 객체 주소 저장 d = p -> getArea(); // 멤버 함수 호출 *포인터로도 private 에는 접근 불가능 p->getArea() == (*p).getArea() // (*p)는 객체 자체가 된다. 객체 배열, 생성 및 소멸 객체 배열 선언 객체 배열을 위한 공간 할당 배열의 각 원소 객체마다 생성자 실행 매개..

[전공] 2022.06.02

[명품 C++] 03 - 2 생성자 소멸자 구조체

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 생성자 constructor 객체가 생성되는 시점에서 자동으로 호출되는 멤버 함수 클래스 이름과 동일한 멤버 함수 리턴 값이 없다. class Circle { Circle(); // 클래스 이름과 동일 Circle(int r); // 생성자 중복 선언 - 매개 변수 없는 생성자, 매개 변수 가진 생성자 }; Circle::Circle() { } // 생성자 함수도 구현해야 한다. Circle::Circle(int r) { } 생성자 함수의 특징 생성자의 목적 객체가 생성될 때 객체가 필요한 초기화를 위해 멤버 변수 값 초기화, 메모리 할당, 파일 열기, 네트워크 연결 등 생성자 이름은 반드시 클래스 이름과 동일 리턴 타입이 없다..

[전공] 2022.06.02

[명품 C++] 03 클래스와 객체

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 객체 캡슐화 객체의 본질적인 특성 외부에 객체의 일부분 공개 멤버 변수와 멤버 함수 상태 state와 행동 behavior로 구성 멤버 변수에 상태 저장 멤버 함수에 행동 저장 직접 값에 접근하지 않음 → 멤버 함수를 통해 멤버 변수에 접근 클래스와 객체 클래스 객체를 만드는 틀, 설계도 객체 (== 실체)가 아님 멤버 변수와 멤버 함수로 구성 클래스 선언부 class declaration class 키워드를 이용 멤버 변수와 멤버 함수 선언 멤버 변수는 클래스 선언 내에서 초기화할 수 없음 멤버 함수는 원형 prototype 형태로 선언 멤버에 대한 접근 권한 지정 private, public, protected public ..

[전공] 2022.06.02

[명품 C++] 02 C++ 프로그래밍의 기본

출처 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 (윤영 교수님) 주석문 개발자가 붙인 메모, 프로그램에 대한 설명 프로그램의 실행에 영향을 미치지 않음 /* 여러 줄 주석 * // 한 줄 주석 #include #include 전처리기 C++ preprocessor에게 내리는 지시 컴파일 전에 실행 헤더 파일 컴파일러가 설치된 폴더에서 찾으라는 지시 표준 입출력을 위한 클래스와 객체, 변수 등이 선언 코드로 정의되어 있지 않음! 확장자 없는 텍스트 파일 include 폴더에 존재 *표준 C++에서 헤더 파일은 확장자 없음, 이름 공간 적시 필요 main() 함수 프로그램의 실행을 시작하는 함수 운영 체제 OS가 main() 함수 실행 main()이 종료하면 프로그램 종료 반환값..

[전공] 2022.06.02

[명품 C++] 01 C++ 시작

참고 : 명품 C++ Programming (저자 황기태) 객체지향프로그래밍 프로그래밍 언어 기계어 - 어셈블리어 - 고급언어 어셈블러 : 어셈블리어 프로그램을 기계어 코드로 변환 컴파일러 : 고급 언어로 작성된 프로그램을 기계어 코드로 변환 컴파일 : 고급 프로그램을 기계어 프로그램으로 변환하는 과정 C++ 언어의 역사 연대순 C → C++ → JAVA → C# C언어에 객체 지향 특성(object oriented programming) 및 기능 추가 C++은 C언어의 모든 기능 유지 C++ 표준 1998년 ANSI(American National Standards Institue)에서 표준 설정 그 후 C++ 표준 계속 진화 표준의 중요성 모든 플랫폼, 모든 표준 C++ 컴파일러에 의해 컴파일 가능 ..

[전공] 2022.06.02

SUAPC 2022 Winter 문제 풀이 + 후기

C번 - 카카오뷰 큐레이팅 효용성 분석 (브론즈 2) (1AC 0WA) A번 문제를 읽고 있었는데 스코어보드에 C번에 풀리는 것을 보고 바로 C번으로 넘어왔다. 단순하게 입력을 배열에 저장하고 합을 구하는 문제였다. 첫 번째 줄 입력 받으면서 배열에 흥미도를 저장하고 전체 흥미도의 합을 구했다. 두 번째 줄 입력을 받으면서 0을 입력받은 경우 동일한 index의 흥미도를 앞서 저장한 배열에서 찾아 변수에 더했다. 알고리즘은 문제를 읽으면서 바로 파악했는데 A번 풀다가 넘어오는 시간과 C++로 구현하는 시간이 더해져 11min만에 풀었다. 더 빨리 풀 수 있었는데 늦게 제출해 조금 아쉬운 문제이다. C번 코드 #include #include using namespace std; int n; // 콘텐츠의 ..

[기록] 2022.04.27

SUAPC 2022 Winter 참가 후기

SUAPC 2022 Winter 참가 후기 결과부터 이야기하자면 4 AC 0 WA로 32위를 했다. 목표했던 ‘4솔에 제출 수를 줄이자’를 달성해서 기쁘다. BLAZING DEVS 팀 결성 SUAPC에 참가하기 위해 작년 7월 팀이 꾸려졌다. wltnjeon0119님이 SUAPC를 같이 나가자고 제안해주셔서 불코도 멤버인 wltnjeon0119님, uwoobeat님과 함께 출전했다. 팀명은 BLAZINGdevs. 우리 스터디의 정체성, 불타는 코딩 도비들을 잘 알려주는 팀명이다. 여담이지만 스코어보드를 보니 재치 있는 팀명들이 정말 많았다. 우리 팀명 너무 노잼 아니었나 싶다...ㅎㅎ 연습 팀 연습 시작 2월 전까지는 하이아크와 ICPC-신촌 초급 스터디 문제셋을 풀면서 코드 리뷰를 진행했다. SUAPC..

[기록] 2022.04.27

HI-ARC 하이아크 운영진 면접 후기

아.. 면접이네.. 면접 끝나고 30초 후에 쓰는 따끈따근한 후기이다 하하하핳ㅎㅎ하하하하핳ㅎㅎㅎㅎㅎㅎ 정규 회의 전 가볍게 인사 나누는 자리로 생각했다가 진지한 면접이라는 사실을 깨닫고 머리가 하얘지고 같은 말만 반복하는 아찔한 경험을 했다. 하이아크 운영진이 부족하다는 정보를 알고 있어서 당연히 면접도 형식상 보는 것이라고 생각했다. 압박 면접까진 아니었지만 운영진으로서 함께할 수 있는지를 확인하는 진짜 면접이었다. 면접은 21시 35분부터 15분 정도 웹엑스로 진행되었고 네 분의 기존 운영진분들이 면접관으로 계셨다. 질문은 8개 정도 있었는데 생각나는 질문 위주로 적어보려고 한다. 질문 지원서에 쓰지 않은 내용 중에 더 준비하신 말이 있으신가요? 하하.. 여기부터 당황했다. 지원서 내용 이외에 하고 ..

[기록] 2022.04.27

백준 6604번: Matrix Chain Multiplication

문제 [BOJ][C++] 백준 6604번: Matrix Chain Multiplication 문제는 링크를 클릭해서 볼 수 있다. 풀이 입력 및 저장 행렬의 개수 n을 입력 받고 이어서 n개의 행렬의 정보를 입력 받는다. 행렬의 정보는 행렬의 이름, 행의 개수, 열의 개수로 이루어져있다. 행과 열을 동시에 저장하기 위해 pair 자료형을 사용했고, 행렬의 이름으로 행렬의 정보를 접근하기 위해 unordered_map을 사용했다. unordered_map은 key의 hash 값으로 value에 접근할 수 있고 탐색 속도는 O(1)이다. 다음으로 예제 입력이 끝날 때까지 입력을 받기 위해 while (cin >> formula) 를 사용했다. string formula; while (cin >> formul..

[알고리즘] 2022.04.27

백준 1431번: 시리얼 번호

문제 [BOJ][C++] 백준 1920번: 수 찾기 문제는 링크를 클릭해서 볼 수 있다. 풀이 stl sort 함수에 compare 함수를 직접 정의해 시리얼 번호를 정렬했다. compare 함수에서 시리얼 번호를 정렬하는 기준은 크게 둘로 나누었다. a와 b의 길이가 다른 경우와 같은 경우. 첫 번째 a와 b의 길이가 다른 경우, a와 b의 길이를 .length()로 구한 뒤 두 길이의 비교값을 반환했다. 두 번째 a와 b의 길이가 같은 경우, get_integer_sum 함수로 a와 b의 자리수 합을 구했다. get_integer_sum 함수는 문자열에서 숫자만 골라내어 그 합을 구하는 함수이다. 구한 두 자리수의 합이 서로 다르다면 두 자리수의 합 비교값을 반환하고, 같다면 a, b 자체 비교값을 ..

[알고리즘] 2022.04.27

백준 1920번: 수 찾기

문제 [BOJ][C++] 백준 1920번: 수 찾기 문제는 링크를 클릭해서 볼 수 있다. 풀이 문제 조건에서 n과 m의 크기는 최대 100,000이다. 시간 제한 1초를 맞추기 위해 시간 복잡도를 고려해야한다. 선형 탐색을 선택할 경우 시간 복잡도는 O(n m)으로 1초의 시간 제한을 넘기게 된다. 따라서 O(log N)의 시간복잡도를 가지는 이분 탐색을 선택했다. 이분 탐색을 선택할 경우 시간 복잡도는 O(n log m)이 되어 시간 제한을 맞출 수 있다. 정수 a들을 a_array에 입력받은 뒤 이분 탐색 알고리즘을 사용하기 위해 a_array를 오름차순으로 정렬했다. left, mid, right는 a_array의 인덱스를 저장한 변수이다. left와 right의 초기값은 각각 0과 n - 1이다...

[알고리즘] 2022.04.27

백준 1157번: 단어공부

문제 [BOJ[C++] 백준 1157번: 단어공부 문제는 https://www.acmicpc.net/problem/1157를 클릭해서 볼 수 있다. 풀이 아스키 코드를 이용하여 문자의 개수를 세는 문제였다. character_count[26] 배열을 만들어 단어에서 'A'부터 'Z'까지 각 문자가 몇 번 나왔는 지 개수를 저장했다. 문자는 index가 0이면 'A', index가 25이면 'Z' 이런 식으로 구분했다. 먼저 소문자와 대문자의 구분을 없앴다. 단어의 길이만큼 반복문을 돌면서 소문자인 경우 아스키 코드값 차이만큼 빼 대문자로 바꾸어 주었다. (소문자는 대문자보다 아스키 코드값이 각각 32 만큼 크다.) 그런 다음 character_count 배열에서 개수를 1씩 더해줬다. 다음은 가장 많이 ..

[알고리즘] 2022.04.27

백준 10026번: 적록색약

문제 [BOJ][C++] 백준 10026번: 적록색약 문제는 https://www.acmicpc.net/problem/10026를 클릭해서 볼 수 있다. 풀이 먼저 적록색약이 아닌 사람이 봤을 때의 구역의 수부터 구했다. 구역을 구하는 과정은 그림을 돌면서 처음 방문하는 노드를 찾아 dfs를 진행했다. 현재 방문한 노드에서 인접 노드 중 방문한 적이 없고, 현재 노드와 색이 같은 인접 노드로 이동했다. 적록색약인 사람이 봤을 때의 구역의 수를 구하기 전에 2가지를 바꿨다. 첫 번째는 적록색약인 사람은 R과 G가 구분되지 않기 때문에 R을 G로 바꿔 그림에서 둘의 차이를 없앴다. 그림을 바꿨기 때문에 구역의 수를 구하는 과정은 적록색약이 아닌 사람이 봤을 때의 구역의 수를 구하는 방법과 같다. 구역의 수를..

[알고리즘] 2022.04.24

멋쟁이사자처럼 홍익대 10기 지원서 + 면접 질문

지원서 질문 다양한 IT동아리 중에서 멋쟁이사자처럼 대학 10기를 선택하고 지원하시게 된 이유를 작성해주세요. 백엔드 파트를 선택한 이유와 관련 경험을 해본 적이 있는지, 그리고 이 파트를 통해 어떠한 성장을 희망하시는지 작성해주세요 멋쟁이사자처럼 대학은 협업과 팀워크를 중요한 가치로 생각하는 공동체입니다. 지원자 본인이 협업과 팀워크를 진행해보았던 경험과, 그 경험을 멋쟁이 사자처럼 대학에서 어떻게 적용시킬 수 있을지 작성해주세요. 멋쟁이사자처럼 대학은 최소 주 1회 모임 & 10시간 이상의 시간 투자를 권장합니다. 활동 기간 동안 얼마나 열정적으로, 매주 얼만큼의 시간을 할애하실 수 있는지 작성해주세요. 평소에 만들고 싶었던 웹 서비스 아이디어가 있으면 구체적으로 적어주세요. 없다면 관심 분야 정도만..

[기록] 2022.04.20

벨로그에서 티스토리로

개발 블로그 운영 공부 기록과 프로젝트 과정들을 타 개발자와 공유하고 싶어 21년 11월부터 개발 블로그를 운영하고 있다. 블로그 플랫폼은 개발 관련 글을 쓰기 편한 벨로그 velog를 선택했다. 벨로그를 사용했던 이유 벨로그는 아이폰과 비슷하다. 별도의 설정 없이 기본 기능만 사용해도 블로그를 쉽게 운영할 수 있다. 전체적인 UI는 군더더기 없이 깔끔하고 마크다운 문법 지원해 코드를 첨부하기도 편하다. 글 공유가 목적이라 그동안 벨로그에 만족하며 사용해왔다. 티스토리로 이전하게 된 이유 BlazingDevs (이하 블뎁)에서는 12명이 블로그를 운영하고 있다. 그중 나를 제외한 모든 블뎁들이 티스토리를 사용한다. 12명이 새로운 글을 올릴 때마다 티스토리에 접속하다 보니 거의 매일 티스토리에 들어오게 ..

[일기] 2022.04.17