728x90
반응형

C++ 193

백준, BOJ, 2206번, 벽 부수고 이동하기 : C++ [CPP] ****

어려웠다. 개념이 아주 새로웠다. 복습 다시 천천히 해보자 https://www.acmicpc.net/problem/2206 #맞는 풀이 #include #include #include #define X first #define Y second #define SIZE 1000 using namespace std; int dx[4] = { -1,1,0,0 }; int dy[4] = { 0,0,-1,1 }; char arr[SIZE][SIZE]; //입력 int visited[SIZE][SIZE][2]; // 0 벽을 안깼다, 1 깼다 int r, c; typedef struct Position{ int x; int y; int wall; }Pos; int BFS(int _x, int _y) { queue ..

C++문법/ 참조 변수, reference + 참조의 특성

C++에서는 참조 변수라는 새로운 복합 타입을 언어에 추가했다. 여기서 참조는 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름을 말한다. 예를 들어 ace 를 trees 변수의 참조로 만들면 ace와 trees는 같은 변수를 나타내는 것으로 사용할 수 있다. 그런데 생각해보면 굳이 다른 이름을 만들어야 하는가? 라는 의문이 든다. 참조를 하는 주된 이유는 바로 함수의 형식 매개변수에 사용하기 위함이다. -> 해당 변수의 주소를 직접 가리키는 다른 이름의 변수 == 참조 변수 참조를 매개변수로 사용하면 그 함수는 복사본이 아니라 원본 데이터를 가지고 작업한다. 이는 복사본을 만들기 위한 오버헤드가 사라지는 효과도 있다. 그래서 참조는 클래스를 설계할 때 필수적으로 사용된다. 우선 참조가 어..

백준, BOJ, 10026번, 적록색약 : C++ [CPP]

어렵지 않았지만 입력이 귀찮았다. https://www.acmicpc.net/problem/10026 #맞는 풀이 #include #include #include #define X first #define Y second #define SIZE 100 using namespace std; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int rg[SIZE][SIZE]; //적녹 색약 visit int norm[SIZE][SIZE]; // 보통 visit int n; // 행,열 int normCnt, rgCnt; // 답 string arr[SIZE]; //입력 int main(){ cin >> n; //노드입력 for(int i = 0; i> arr[i]; } q..

백준, BOJ, 1987번, 알파벳 : C++ [CPP] ***

음 백트래킹하면서 DFS로 끝까지 가는 것이라 처음 접했을 때는 어려웠다. https://www.acmicpc.net/problem/1987 #맞는 풀이 ( 백트래킹 + DFS ) #include #include #include #include using namespace std; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; char arr[20][20]; int alpha[26]; // ASCII 코드 이용하기 'A' = 65 'a'=97 int R,C; //Row(행) , Column(열) int answer = 0; // 최댓값 //현재 위치, 현재까지의 길이 void dfs(int x, int y, int dist){ // 최댓값 갱신 answer = ma..

C++문법/ 인라인 함수, inline

인라인 함수는 프로그램의 실행 속도를 높이기 위해 C++에 새로 보강된 것이다. (C에서는 매크로 기능을 위해 #define을 쓰고는 했다.) 일반 함수와 인라인 함수의 가장 큰 차이는 프로그래머가 코드를 어떻게 작성하느냐에 있는 것이 아니다. C++ 컴파일러가 코드를 프로그램에 어떻게 결합하느냐에 있다. ++ 인라인 함수와 일반 함수의 차이를 이해하려면 프로그램의 내부 구조를 깊이 있게 살펴볼 필요가 있다. (컴퓨터 구조 수업을 들으면 쉽다) 컴파일 작업의 최종 산출물은 기계어 명령으로 이루어진 실행 프로그램이다. (High-level -> Assembly -> Machinary) 프로그램을 실행하면, 운영체제는 이 명령들을 컴퓨터의 메모리에 로드한다. 로드된 명령들은 각각 하나의 특정 메모리 주소를 ..

C++문법/ 가상, Virtual (+ Override)

Virtual이라는 키워드가 C++에 존재한다. 무슨 용도로 쓰일까?? 알아보자 참고로 여기서 가상이라는 것은 실존하지 않는다는 뜻이 절대 아니다. 우선 답부터 말해주자면 동적 바인딩, Dynamic Binding을 위해서 쓰인다. 즉, 컴파일 시에 어떤 함수가 실행될 지 정해지지 않고 런타임 시에 정해지는 것이다. 여기서 동적 바인딩이란 컴파일 시에 정적 타입으로 참조할 주소가 정해지는 것과 달리 객체를 체크해서 참조할 주소를 정하는 것이라 생각하면 된다. 우선 머리에만 넣었다가 이따가 다시 예로 알아보도록 하자. 우선 업캐스팅을 알아보자 (다운 캐스팅도 있지만 생략) 업캐스팅이란 부모 클래스의 타입으로 자식객체를 선언하는 것 다운 캐스팅이란 자식 클래스 타입으로 부모객체를 선언하는 것 질문을 해보겠다..

C++문법/ 생성자와 소멸자 , Constructor & Destructor

생성자란 객체가 생성되면 자동으로 호출되는 것으로 생성자가 정의되어 있다면 해당 생성자가 호출된다. **생성자를 호출해도 생성자는 Return이 없다. 그냥 값 초기화를 위해 쓰기 때문이다. **생성자는 리턴값이 없더라고 void형으로 선언하지 않는다. -> 생성자에는 데이터형을 선언하지 않는다. // 객체를 초기화 하는 역할을 하기 때문에 리턴값이 없다! /* 클래스 이름 */ (/* 인자 */int x, int y ...) { x_ = x; y_ = y; .... .... } **// 언더바 _는 멤버 변수에 붙여서 구분한다. -> 멤버라는 뜻에 m_x 라고도 쓴다. 어..? 근데 나는 그냥 객체에 인자를 넣어서 초기화를 안해도 되던데?? Car c = new Car(); //?? 이래도 오류 안나던..

프로그래밍 지식 - CS면접 총정리

2022.07.25 업데이트 객체 지향 설계 더보기 [Game Developer, 게임개발자] - 객체지향적으로 생각하기, Object-Oriented Thinking 함수형 프로그래밍 더보기 함수형 프로그래밍은 순수 함수의 조합으로 소프트웨어를 설계하는 방식이다. ** 순수 함수란 함수의 수행으로 side effect (메모리의 값을 직접 수정하는 행위)가 발생하지 않는 함수를 말한다. 객체 지향 프로그래밍의 단점 중 하나는 객체가 상태로 표현되는 것이다. 따라서 객체는 프로그래머가 의도하지 않은 상태를 가질수도 있다. RestAPI 더보기 REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다. 웹의 장점과 HTTP의 우수성을 적극 활용..

CS Interview 2021.11.23

C++에서의 문자열 처리(string, regex)

나는 C/C++/C#/Java/Python을 다 맛보고 특히 Python을 깊게 맛봤지만 문자열 처리만큼은 Python이 최고라고 생각했다. 하지만 언어는 찰흙과 같아서 자기가 만드는 대로 만들어진다. 좀 더 잘 뭉개지는 찰흙이라 쉽게 만들어지느냐 딱딱해서 만들기 어렵냐 차이지.. 결국 뭐든 만들 수 있다. 그래서 이번엔 C++에서도 문자열 처리가 가능한데.. 어떤 식으로 해야 유용한가를 탐구해보려고 한다. 알아보자 기본적으로 유용한 라이브러리(정의된)이 많다. 가장 대표적인 2가지 #include // 정규표현식 -> 필터링할 때 무지 많이 쓰인다. #include // 문자열을 다루려면 거의 필수 정규표현식과 문자열 라이브러리다. 우선 string 클래스부터 알아보자. 우선 문자열 클래스를 다루기 위..

C++문법 / 문자열 함수를 위한 cctype

코딩테스트에서 유용한 헤더라고 할 수 있다. #include // 문자 관련 함수들의 원형 이 헤더에 문자열에 엄청 유용한 함수들이 들어있다. int isalnum(); //알파벳이나 숫자이면 true int isalpha(); //알파벳이면 int isblank(); // 공백이나 tab이면 int iscntrl(); // 제어문자이면 int isdigit(); // 십진 숫자이면 int isgraph(); // 빈칸이 아닌 인쇄할 수 있는 문자면 int islower(); // 소문자이면 int isprint(); // 빈칸을 포함한 인쇄할 수 있는 문자면 int ispunct(); // 구두점 문자이면 int isspace(); // 빈칸이면 int isupper(); // 대문자면 int isxd..

728x90
반응형