해당 포스팅은 "코딩 테스트 합격자 되기 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> 을 이용해 사용할 수 있으며 여러가지 내장함수를 제공하며 유용하게 사용 할 수 있습니다.
'GroupStudy > [C++]코딩 테스트 합격자 되기' 카테고리의 다른 글
| [코딩 테스트 합격자 되기] C++ - unordered_map, unordered_set (0) | 2024.07.10 |
|---|---|
| [코딩 테스트 합격자 되기] C++ - STL 반복자, 컨테이너(vector,set,map) (0) | 2024.07.10 |
| [코딩 테스트 합격자 되기] 1주차 - 시간복잡도 (0) | 2024.07.07 |
| [코딩 테스트 합격자 되기] 0주차 - 효율적으로 공부하기 (0) | 2024.07.07 |
| [코딩 테스트 합격자 되기] - 책 소개 및 스터디 시작 (0) | 2024.07.06 |