해당 포스팅은 "코딩 테스트 합격자 되기 C++편" 의 책 및 강의를 보며 포스팅 한 내용입니다. 

 

 

 

[지금 무료] 코딩 테스트 합격자 되기 - C++ 강의 | dremdeveloper - 인프런

dremdeveloper | 코딩 테스트 합격을 위한 C++ 강의, 책 없이도 가능! 저자와 직접 소통 가능한 커뮤니티 제공!, [사진]여기에 문의 하세요https://open.kakao.com/o/gX0WnTCf📘 코딩 테스트 합격자 되기 - C++편

www.inflearn.com

 

💬주요 키워드

변수 : 메모리(RAM) 상에 값을 저장하는 공간

자료형 : 변수가 어떤 종류의 데이터를 저장할 수 있는지를 정의합니다.(정수,실수,문자,논리)

메모리(RAM) : 컴퓨터 시스템에서 데이터와 프로그램을 일시적으로 저장하고 있는 물리적인 공간입니다.

배열 : 하나의 변수에 여러가지 값을 연속적으로 저장할 수 있는 변수의 값을 나열한 형태입니다.

문자열 :  여러가지 문자를 연속적으로 저장하여 문자를 나열한 형태입니다.

 

 


 

🪄주제

 

 


📝생각 노트

 

 

     Built-in 데이터 타입(변수)

  • 언어 자체(C++에서 내장되있는 Built-in)에서 제공하는 변수 타입
  • C++은 변수 선언시 데이터 타입을 명시해야 함
  • 자료형의 종류로는 정수형, 부동소수형, 논리형, 문자형, 배열형 등이 있음.
#include <iostream>

int main()
{
	int a = 0;					// 정수형 변수
	double b = 20.5;			// 실수형 변수
	char c = 'A';				// 문자형 변수
	bool d = true;				// 불리언 변수 (참/거짓)

	int array[5] = { 1,2,3,4,5 };	// 배열형 변수

	std::cout << "정수형 : " << a << std::endl;
	std::cout << "실수형 : " << b << std::endl;
	std::cout << "문자형 : " << c << std::endl;
	std::cout << "논리형 : " << d << std::endl;
	std::cout << "배열형 : ";
	for (auto& e : array) std::cout << e << " ";
}

 int a = 0;

(초기화라는 과정을 거친 변수)

 int a;

(초기화를 안하고 선언만 되있는 변수)

ex) 부동산에서 땅을 사서 원룸을 짓는데 입주는 안된 상태, 쓰레기값이 들어있음

 

int : 자료형

a : 변수명(메모리주소의 별명, 별칭)

= : 초기화 연산자

0 : 값

 

[자료형] [변수명] [초기화 연산자] [값] [;] 으로 되어있는 문단을 변수를 초기화 한다. 라고 하며

자료형에 알맞는 목적을 가진 이름을 지어주고 메모리에서 주소를 할당받아 값을 집어넣는 일련의 과정입니다.

 

변수란?

 - 변수는 메모리(RAM)상에 값을 저장하는 공간

    ex) 변수를 쉽게 비유하자면 변수를 선언하는 것은 집(건물)을 짓는것이고, 값을 초기화 하는 것은 사람이 입주하는 것이라 생각하면 쉽다.

- 변수를 선언할 때는 해당 변수의 타입을 지정해야 하며, 그 타입에 따라 저장할 수 있는 값의 종류와 크기가 결정됩니다.

    ex) 집의 종류도 원룸,아파트,체육관 등 여러가지 종류에 따라 다르기 때문에 집의 종류에 따라 입주할 수 있는 사람의 수도 달라집니다. 변수도 마찬가지로 자료형의 종류에 따라 많은 데이터를 넣을 수 있습니다.

Tip) 왠만하면 변수 선언시 초기화(값을 집어넣는 행위)를 같이 하는게 좋다.

 

데이터 타입(자료형)이란?

- 변수의 종류를 의미한다. 크게 정수형, 소수형(실수형), 문자형, 논리형 으로 나뉘어져 있다.

- 각각의 변수에는 자료형을 선언하게 되며 자료형에 맞는 형태의 숫자(데이터 타입) 밖에 들어가지 않는다.  

 

- 각각의 데이터타입에는 메모리(RAM)에서 byte 단위의 공간을 할당받는다.

    ex) 이해하기 어렵다면, 집으로 비유하면 된다. 집의 평수가 넓으면 많은 인원을 수용할 수 있듯 목적에 따라 byte라는 단위의 공간을 할당받는다.

 

아래 코드는 자료형에 따라 각각의 공간을 표현한 코드이다.

#include <iostream>

using namespace std;

int main()
{
	cout << sizeof(bool) << endl;			// 논리형 : 1byte
	cout << sizeof(char) << endl;			// 문자형 : 1byte
	cout << sizeof(int) << endl;			// 정수형 : 4byte
	cout << sizeof(double) << endl;			// 실수형 : 8byte
}

 

배열이란?

- 동일한 타입의 변수를 묶어서 사용하는 자료구조

- 임의 접근을 통해 특정 위치 원소에 빠르게 접근 가능

- 임의 위치에 원소를 삽입해야 하는 경우 O(N), 맨 뒤에 원소를 삽입하는 경우 O(1)

 

배열의 초기화 : int a[5] = {0,1,2,3,4};

배열 접근 : a[2] //2 

 

#include <iostream>

using namespace std;

int main()
{
	int array[5] = { 1,2,3,4,5 };			//정적 할당
	int* d_array = new int[5];				//동적 할당

}

 

 배열의 장점

1. 인덱스의 접근이 O(1), 맨 뒤의 원소 삽입/삭제도 O(1)

2. 메모리 주소가 연속적이라 묶어서 관리하기 쉬움

    ex) 아파트의 101동 101호,102호와 같이 주소가 바로 옆집으로 순회가 쉽고 101동의 주민으로 묶을 수 있음

 

 배열의 단점

1. 중간의 원소 삽입/삭제는 O(N)

2. 생성된 배열의 Capacity(크기)에서 벗어난 접근을 하면 오류를 내뿜음

 


문자열이란?

 - 문자를 나열한 집합체 (배열은 숫자의 나열, 문자열은 문자의 나열)

 - C++에서는 문자열을 편리하게 사용할 수 있는 여러가지 메서드(함수)를 제공함.

 - 문자열을 사용하기 위해서는 "#include <string>" 헤더를 꼭 추가해야 함!

 - string 문자열은 C스타일과는 다르게 '\0' 문자로 종료되지 않는다.

 

문자열의 초기화 : string str = {"Hello, String!"}

문자열의 접근 : str[0]; // 'H'

 

#include <iostream>
#include <string>				// string(문자열)을 사용하기 위한 헤더 파일

using namespace std;
int main()
{
    {// 1. 기존 C타입 문자열 사용법
        char* char_array = new char[6]; // 동적 선언
        cin >> char_array; // Hello로 초기화
        for (int i = 0; i < 6; i++) // 반복문
        {
            cout << char_array[i]; // Hello 출력
        }
    }

    cout << endl;

    {// 2. string 타입 문자열 사용법
        string str = {"Hello, string"}; // 초기화
        for (int i = 0; i < str.length(); i++) // str.length() 문자열의 길이만큼 반복
        {
            cout << str[i]; // Hello, string 출력
        }
    }
}

 

 

자주 사용하는 문자열의 메서드(함수)

더보기
더보기

 - string 모든 메서드 예제 보기

//############################################################
// | cafe       | http://cafe.naver.com/dremdelover          |
// | Q&A        | https://open.kakao.com/o/gX0WnTCf          |
// | business   | ultrasuperrok@gmail.com                    |
//############################################################
#include <iostream>
#include <string>

using namespace std;

int main() {
    // 1. 기본적인 문자열 생성 및 출력
    string str1 = "Hello, World!";  // 문자열 초기화
    cout << str1 << endl;           // 출력: Hello, World!
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 값    :  | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 시간 복잡도: O(n) (n은 문자열의 길이)
    // 주의할 점: 문자열의 길이가 길어질수록 초기화에 시간이 더 걸립니다.

    // 여러가지 문자열의 초기화 방법
    string str2("Hello");           // str2: H e l l o
    cout << str2 << endl;           // 출력: Hello
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | H| e| l| l| o|
    // 시간 복잡도: O(n)

    string str3 = "World";          // str3: W o r l d
    cout << str3 << endl;           // 출력: World
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | W| o| r| l| d|
    // 시간 복잡도: O(n)

    string str4(str2 + ", " + str3 + "!"); // str4: H e l l o ,   W o r l d !
    cout << str4 << endl;                  // 출력: Hello, World!
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 값    :  | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 시간 복잡도: O(n + m) (n과 m은 각각 str2와 str3의 길이)
    // 주의할 점: 문자열을 자주 연결하면 시간 복잡도가 커질 수 있습니다.

    string str5 = str1;             // str5: H e l l o ,   W o r l d !
    cout << str5 << endl;           // 출력: Hello, World!
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 값    :  | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 시간 복잡도: O(n)

    string str6(5, 'A');            // str6: A A A A A
    cout << str6 << endl;           // 출력: AAAAA
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | A| A| A| A| A|
    // 시간 복잡도: O(n)

    /* 
    문자열(string)이란?
    - C++의 STL에서 제공하는 문자열 클래스입니다.
    - 문자의 연속으로 구성되며, '\0' 문자로 종료되지 않습니다 (C 스타일 문자열과 차이점).
    - + 연산자를 통해 문자열을 연결할 수 있습니다.
    - 내부적으로는 동적 배열로 구현되어 있어 크기를 동적으로 변경할 수 있습니다.
    */

    // 2. 문자열 연결
    string str7 = "Hello";           
    cout << str7 << endl;           // 출력: Hello
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | H| e| l| l| o|
    // 시간 복잡도: O(n)

    string str8 = "World";           
    cout << str8 << endl;           // 출력: World
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | W| o| r| l| d|
    // 시간 복잡도: O(n)

    string str9 = str7 + ", " + str8 + "!";  
    cout << str9 << endl;           // 출력: Hello, World!
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 값    :  | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 시간 복잡도: O(n + m)
    // 주의할 점: 여러 문자열을 연결할 때는 효율성을 고려해야 합니다.

    // 3. 문자열 길이와 접근
    cout << "Length of str1: " << str1.length() << endl;  // 출력: 13
    // str1의 길이: 13 (H e l l o ,   W o r l d !)
    // 시간 복잡도: O(1)

    cout << "First character of str1: " << str1[0] << endl;  // 출력: H
    // str1의 첫 번째 문자: H (H e l l o ,   W o r l d !)
    // 시간 복잡도: O(1)

    /* 
    length() 메서드를 사용하여 문자열의 길이를 알 수 있습니다.
    예: str1.length()는 13을 반환합니다.
    
    대괄호([])를 사용하여 문자열의 특정 위치에 있는 문자에 접근할 수 있습니다.
    예: str1[0]은 'H'를 반환합니다.
    */

    // 4. 문자열의 부분 문자열 및 찾기
    string str10 = str1.substr(7, 5);  
    cout << "Substring: " << str10 << endl;  // 출력: World
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | W| o| r| l| d|
    // 시간 복잡도: O(m) (m은 부분 문자열의 길이)
    // 주의할 점: substr의 인자는 시작 위치와 길이입니다.

    size_t pos = str1.find("World");  
    if (pos != string::npos) {
        cout << "\"World\" starts at index " << pos << endl;  // 출력: "World" starts at index 7
    } else {
        cout << "\"World\" not found!" << endl;
    }
    // str1:   | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 인덱스: | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 시간 복잡도: O(n)
    // 주의할 점: find 메서드는 찾는 문자열의 시작 위치를 반환하며, 없으면 string::npos를 반환합니다.

    // 5. 문자열 대체
    string str11 = "I like cats";     
    cout << str11 << endl;            // 출력: I like cats
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
    // 값    :  | I|  | l| i| k| e|  | c| a| t| s|

    str11.replace(7, 4, "dogs");  
    cout << str11 << endl;  // 출력: I like dogs
    // str11:  | I|  | l| i| k| e|  | d| o| g| s|
    // 인덱스: | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
    // 시간 복잡도: O(m) (m은 대체할 문자열의 길이)
    // 주의할 점: replace의 인자는 시작 위치, 길이, 대체할 문자열입니다.

    return 0;
}

 1. 초기화

    string str1 = "Hello, World!";  // 문자열 초기화
    string str2("Hello");           // str2: H e l l o
    string str3 = "World";          // str3: W o r l d
    string str4(str2 + ", " + str3 + "!"); // str4: H e l l o ,   W o r l d !
    string str5 = str1;             // str5: H e l l o ,   W o r l d !
    string str6(5, 'A');            // str6: A A A A A

 

 2. replace(문자열 대체)

    // 문자열 대체
    string str11 = "I like cats";
    cout << str11 << endl;            // 출력: I like cats
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
    // 값    :  | I|  | l| i| k| e|  | c| a| t| s|

    str11.replace(7, 4, "dogs");
    cout << str11 << endl;  // 출력: I like dogs
    // str11:  | I|  | l| i| k| e|  | d| o| g| s|
    // 인덱스: | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
    // 시간 복잡도: O(m) (m은 대체할 문자열의 길이)
    // 주의할 점: replace의 인자는 시작 위치, 길이, 대체할 문자열입니다.

 

 3. + operator(문자열 추가)

    // 문자열 연결
    string str7 = "Hello";
    cout << str7 << endl;           // 출력: Hello
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | H| e| l| l| o|
    // 시간 복잡도: O(n)

    string str8 = "World";
    cout << str8 << endl;           // 출력: World
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | W| o| r| l| d|
    // 시간 복잡도: O(n)

    string str9 = str7 + ", " + str8 + "!";
    cout << str9 << endl;           // 출력: Hello, World!
    // 인덱스:  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 값    :  | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 시간 복잡도: O(n + m)
    // 주의할 점: 여러 문자열을 연결할 때는 효율성을 고려해야 합니다.

 

 

 4. substr(기존 문자열의 일부분을 복사 후 새로운 string으로 생성)

 

    // 문자열의 부분 문자열
    string str10 = str1.substr(7, 5);
    cout << "Substring: " << str10 << endl;  // 출력: World
    // 인덱스:  | 0| 1| 2| 3| 4|
    // 값    :  | W| o| r| l| d|
    // 시간 복잡도: O(m) (m은 부분 문자열의 길이)
    // 주의할 점: substr의 인자는 시작 위치와 길이입니다.

 

 5. find(문자열 검색)

 

    // 문자열 찾기
    size_t pos = str1.find("World");
    if (pos != string::npos) {
        cout << "\"World\" starts at index " << pos << endl;  // 출력: "World" starts at index 7
    }
    else {
        cout << "\"World\" not found!" << endl;
    }
    // str1:   | H| e| l| l| o| ,|  | W| o| r| l| d| !|
    // 인덱스: | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
    // 시간 복잡도: O(n)
    // 주의할 점: find 메서드는 찾는 문자열의 시작 위치를 반환하며, 없으면 string::npos를 반환합니다.

 

주의할 점: find 메서드는 찾는 문자열의 시작 위치를 반환하며, 없으면 string::npos를 반환합니다.

 

 6. length(문자열의 길이)

 

    // 문자열 길이
    cout << "Length of str1: " << str1.length() << endl;  // 출력: 13
    // str1의 길이: 13 (H e l l o ,   W o r l d !)
    // 시간 복잡도: O(1)

 

 

 

 

 



 

📖 내용 요약

 

요약

1. C++에서는 Built-in 데이터 타입을 사용하여 변수를 선언할 수 있습니다.

 

2. 변수를 선언할 때는 데이터 타입을 명시해야 하며, 정수형, 실수형, 문자형, 논리형, 배열형 등이 있습니다.
    ex) int 형 변수는 정수 값을 저장하고, double 형 변수는 실수 값을 저장합니다.

 

3. 변수는 메모리(RAM)에서 공간을 할당받아 값을 저장하는 곳입니다.
각 자료형은 메모리에서 할당되는 크기가 다르며, 변수는 초기화를 통해 값을 직접 할당할 수 있습니다.

 

4. 배열은 하나의 변수명으로 여러가지 값을 연속적으로 저장할 수 있는 변수의 형태입니다.

 

5. 문자열은 하나의 변수명으로 문자를 나열하여 단어, 문장을 만들 수 있는 변수의 형태입니다.

 

6. 문자열은 #include <string> 을 이용해 사용할 수 있으며 여러가지 내장함수를 제공하며 유용하게 사용 할 수 있습니다.

+ Recent posts