본문 바로가기
반응형

C++146

C++ 클래스와 구조체의 데이터 정렬(Data alignment) 왜 데이터 크기가 다르지? 우리는 C++를 사용할 때 class나 struct를 사용합니다. 알고계시는 분들도 있겠지만 기본적으로 맴버변수를 선언하면 자료형의 크기가 맞춰집니다. 이를 컴파일 데이터 정렬이라고 하는데, 일단 코드를 보시죠. #include class A { int num; //4byte char c1; //1byte char c2; //1byte}; int main(void) { printf("%d\n", sizeof(A)); return 0;} 6바이트가 나와야 하지만 8바이트가 나오게 됩니다. 이는 구조체(struct)도 마찬가지 입니다. 왜 이렇게 되는지 살펴보고자 합니다. 1. 프로세스의 메모리 접근 단위기본적으로 해당 코드를 실행하면 메모리로 올라가게 됩니다.그리고 프로세스는 함수가 실행될 때마다 변수의 .. 2020. 6. 24.
C++] 싱글톤(Singleton)정의 방법과 설명. C++에서 자주는 아니지만 심심치않게 싱글톤(Singleton)을 활용한 사례들을 본적이 있습니다. 굳이 사용하지 않아도 알아두면 좋은 기법입니다. 왜냐하면 클래스의 거의 모든걸 고루 담고 있기 때문입니다. static변수, private 생성자, 소멸자, 늦은 초기화 등..... 꽤 얻어갈 정보들이 있습니다. 때문에 소개하고 설명해보고자 합니다. 1. 싱글톤(Singleton)이란?싱글톤은 말 그대로 혼자라는 뜻입니다. 클래스의 생성을 딱!! 1개로 정한다는 뜻이죠. 따라서 해당 클래스의 객체는 static으로 생성이 됩니다. 물론 여러개의 변수가 하나의 클래스를 가르킬 순 있겠죠. 하지만, 그 클래스의 객체가 복사가 되면 안됩니다. 즉, 똑같은 클래스 정보가 2개 이상 늘어나면 안된다는 것이죠. 이렇.. 2020. 6. 21.
C++ 에서의 OOP의 개념에 대한 설명(Abstraction, Encapsulation, Inheritance, Polymorphism) 1. OOP란?? (Object Oriented Programming) C++는 객체지향 언어 입니다. 해당 언어를 OOP라고 부르며 Object Oriented Programming의 약자입니다. 이 OOP에 대한 개념에 대해 설명해 볼까합니다. 왜냐하면..... 면접에서 물어볼 수 있는 질문이기 때문입니다. 기본적으로 C++의 OOP라 하면 다음과 같은 단어가 나옵니다. 1. Class 2. Object 3. Abstraction 4. Encapsulation 5. Inheritance 6. Polymorphism 이중에 Class와 Object는 Abstraction에 대한 내용에 포함 되므로 Abstraction, Encapsulation, Inheritance, Polymorphism에 대한 설.. 2020. 6. 21.
C++ 가상 상속(virtual inheritance) 1. 가상 상속(virtual inheritance) 이란??C++에선 다중상속을 지원합니다. JAVA는 다중상속을 막고 있지요.다중상속은 장점과 단점이 존재합니다.장점으론 객체지향의 상속성을 좀 더 유연하게 해주는 역할을 하죠.하지만 단점은 다이아몬드 상속구조를 띌 수 있으며, 이는 메모리 낭비, 성능저하로 이어질 수 있습니다. 그럼 다음 그림과 같은 형태로 상속을 진행해 보겠습니다. 그림코드 #include class A {public: A() { printf("A 생성자\n"); } ~A() { printf("A 소멸자\n"); } int A_num;}; class B : public A {public: B() { printf("B 생성자\n"); } ~B() { printf("B 소멸자\n"); .. 2020. 6. 20.
C++ 순수 가상 함수란? 추상 클래스란??(pure virtual function, abstract class) 1. 순수 가상 함수란?(pure virtual function) C++에서의 순수 가상 함수란 무엇일까요?? virtual void foo() = 0; 이렇게 생긴 녀석들을 순수 가상함수라고 부릅니다. (pure virtual function) 함수의 정의가 이뤄지지 않고 함수만 선언한 것이지요. 이렇게 선언된 순수 가상 함수가 있다면 이를 추상클래스(abstract class)라고 부릅니다. 또한 이 추상클래스는 객체로 만들지 못하고 상속으로써만 사용됩니다. 그리고 추상클래스를 상속받은 자식 클래스는 무조건 해당 순수 가상 함수를 override 시켜줘야 합니다. 이 추상클래스, 순수 가상 함수가 어떤 이점이 있으며, 어느 상황에 사용하는지 설명함에 앞서 함수 객체의 생성이 안되는지부터 확인해보겠습니.. 2020. 6. 20.
프로그래머스] C++ 동적계획법(Dynamic Programming) - 정수 삼각형(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/43105 1. 문제 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.제한사항삼각형의 높이는 1 이상 500 이하입니다.삼각형을 이루고 있는 숫자는 0 이상.. 2020. 6. 17.
프로그래머스] C++ Summer/Winter Coding(~2018) - 숫자 게임(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12987 1. 문제xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다.먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.각 사원은 딱 한 번씩 경기를 합니다.각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.만약 숫자가 같다면 누구도 승점을 얻지 않습니다.전체 사원들은 우선 무작.. 2020. 6. 17.
C++] reinterpret_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast 가 있습니다. 그 중 reinterpret_cast에 대해 알아보도록 하겠습니다. 1. reinterpret_cast란?cast중 가장 쎈놈? 입니다. cast방식은 포인터 -> 포인터, 포인터 -> 일반변수, 일반변수 -> 포인터로주로 포인터 관련된 cast입니다. 단, 자료형 -> 다른 자료형은 안됩니다. rei.. 2020. 6. 17.
백준 2805번] C++ 나무 자르기 해당 문제는 백준 사이트에서 풀 수 있습니다. https://www.acmicpc.net/problem/2805 ※백준 사이트를 풀 때 다른 코딩테스트 사이트와는 다르게 입력과 출력을 해줘야 합니다. 그리고 cout need_treeLen; vectortree; tree.reserve(N + 1); for (int i = 0; i > temp; tree.emplace_back(temp); } sort(tree.rbegin(), tree.rend()); //내림차순 정렬로 최대 값이 앞으로 오게 한다. MAX = tree[0]; printf("%lld\n", binary_search(tree, 0, MAX)); return 0;} 2020. 6. 16.
C++] const_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 const_cast에 대해 알아보도록 하겠습니다. 1. const_cast란??이름만 보면 const를 cast해 const변수를 바꾸는 그런역할을 할 것 같이 생긴 녀석입니다.맞으면서도 다릅니다. const_cast를 할 수 있는 조건이 있습니다. 1. const로 선언된 포인터만 const를.. 2020. 6. 15.
프로그래머스] C++ 동적계획법(Dynamic Programming) - 타일 장식물(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/43104 1. 문제대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개의 나선 모양처럼 점점 큰 타일을 붙인 형태였다. 타일 장식물의 일부를 그리면 다음과 같다. 그림에서 타일에 적힌 수는 각 타일의 한 변의 길이를 나타낸다. 타일 장식물을 구성하는 정사각형 타일 한 변의 길이를 안쪽 타일부터 시작하여 차례로 적으면 다음과 같다. [1, 1, 2, 3, 5, 8, .] 지수는 문득 이러.. 2020. 6. 15.
C++] dynamic_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 dynamic_cast에 대해 알아보도록 하겠습니다. 1. dynamic_cast란?class의 상속관계에서의 형변환을 프로그래머가 올바르게 하도록 도와주는 긴능을 제공하는 녀석입니다.dynamic_cast는 RTTI(Run Time Type Information)을 지원합니다.RTTI는 런타임.. 2020. 6. 14.
프로그래머스] C++ 연습문제 - 줄 서는 방법(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12936# 1.문제n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람이 있다면 다음과 같이 6개의 방법이 있습니다.[1, 2, 3][1, 3, 2][2, 1, 3][2, 3, 1][3, 1, 2][3, 2, 1]사람의 수 n과, 자연수 k가 주어질 때, 사람을 나열 하는 방법을 사전 순으로 나열 했을 때, k번째 방법을 return하는 solution 함수를 완성해주세요.제한사.. 2020. 6. 14.
C++] static_cast란?? 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 static_cast에 대해 알아보도록 하겠습니다. 1. static_cast란?C++에서 제공하는 기능중 하나로 프로그래머가 형변환을 할 때 오류를 체크해 줍니다. 이 오류는 코드상에서 체크해줍니다. 마치 없는 변수나 함수를 사용자가 사용할 때 처럼 말이죠. 그럼 예시를 보겠습니다. 1) 일반.. 2020. 6. 14.
프로그래머스] C++ 연습문제 - 가장 긴 팰린드롬(level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/12904?language=cpp 1. 문제앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들면, 문자열 s가 abcdcba이면 7을 return하고 abacde이면 3을 return합니다.제한사항문자열 s의 길이 : 2,500 이하의 자연수문자열 s는 알파벳 소문자로만 구성입출력 예sanswerabcdcba7abacde3입출력 예 설명입출력 .. 2020. 6. 14.
반응형

스킨편집 -> html 편집에서