Cpp 16

[백준] 1427 with C++

문제설명 입출력 예제 개념 2751번과 마찬가지로 우선순위 큐를 이용하면 쉽게 해결할 수 있다. 이전 문제와 다르게 비교자를 less를 이용하면 내림차순으로 정렬된다는 점을 유념하자. 풀이 #include #include int main() { std::priority_queue que; std::string str; std::cin >> str; 우선순위 큐를 선언하고, 숫자를 문자열로 받아준다. for (char c : str) { que.push(c - '0'); } while (!que.empty()) { std::cout > str; for (char c : str) { que.push(c - '0'); } while (!que.empty()) { std::cout

Algorithm/백준 2023.04.11

[백준] 25206 with C++

문제설명 입출력 예제 개념 학점의 평균을 계산하는 문제다. 학점을 계산하는 방법은 다음과 같다. 전공 학점: 학점 * 과목 평점 전공 학점 평균: 전공 학점 / 총 학점 P 과목은 제외 따라서 전공 학점들을 계산하여 모두 더한 후 총 학점으로 나눠주면 문제를 해결할 수 있다. 풀이 (1) #include int main() { int count = 0; float sum = 0; float grades[9] = { 0 }; std::string str[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"}; 신청한 총 학점을 계산할 count, 학점의 총합을 계산할 sum, A+부터 F까지 학점을 계산할 grades 변수를 선언한다. for (int i..

Algorithm/백준 2023.04.05

[자료구조] 컨테이너 어댑터

컨테이너 어댑터(Container Adapter)개요 앞서 살펴본 컨테이너들은 완전 바닥부터 직접 만들었다. 하지만 이미 존재하는 컨테이너를 기반으로 새로운 컨테이너를 만드는 작업, 즉, 래핑(wrapping)하여 새로운 인터페이스를 만드는 것이 더욱 효율적일 때가 있다. 이것이 바로 컨테이너 어댑터다. C++ 표준 라이브러리에서 제공하는 대표적인 컨테이너 어댑터를 간략하게 설명하고 구현하는 시간을 가져보자.std::stack  스택(stack)은 데이터의 처리와 저장을 위해 LIFO(Last In First Out, 후입선출) 구조를 사용하는 컨테이너다. 기능적인 측면에서 스택은 한쪽 끝에서만 데이터를 삽입하거나 삭제하는데, 이를 활용해 괄호를 검사하거나, 뒤로 가기 버튼, 컴파일러를 구현할 때 사용된..

CS/자료구조 2023.04.03

[백준] 2563 with C++

문제설명 입출력 예제 개념 겹친 색종이를 제외한 나머지의 색종이의 넓이를 구하는 문제다. 전체 넓이에서 색종이가 차지하고 있는 곳을 빼는 방식과, 색종이가 차지하고 있는 곳의 개수를 찾으면 간단하게 해결되는 문제다. 풀이 #include int main() { int ary[100][100] = { 0 }; int n, result = 0; std::cin >> n; 먼저 2차원 배열 ary를 선언해 주고, 색종이의 개수를 n으로 초기화한다. 그리고 넓이를 출력할 result 변수도 선언해 준다. while (n--) { int y, x; std::cin >> y >> x; for (int i = y - 1; i < y + 9; i++) { for (int j = x - 1; j < x + 9; j++)..

Algorithm/백준 2023.04.02

[자료구조] std::deque

std::deque개요 앞서 살펴본 자료구조들은 연속된 자료구조 거나, 연결된 자료구조였다. 하지만 std::deque(Double-ended queue)는 두 가지 방식이 섞여있는 형태며, 양방향 삽입/삭제가 모두 가능한 자료구조다. 따라서 deque는 배열과 리스트의 장점을 모두 가지고 있어, 둘의 단점을 보완할 수 있는 자료구조다. 여기서 queue는 추후에 다룰 자료구조이니, 이런 것이 있구나 정도만 짚고 넘어가자.구조 앞서 부분에서 deque의 구조가 조금 특이하다는 것을 알았다. 이를 가시적으로 확인하기 위해 다음 그림을 보자.   위 그림은 deqeue의 전체 덱 자료구조를 나타내고 있다. Chunk는 여러 개의 메모리 청크 중 하나를 나타낸다. 각각의 청크는 연속된 메모리 블록으로 구성되..

CS/자료구조 2023.04.01

[자료구조] std::list

std::forward_list개요 앞선 자료구조 포스트의 std::forward_list는 아주 기본적인 형태로 구현된 연결리스트다. 따라서 리스트 끝에 원소를 추가하거나, 역방향으로 이동하는 기초 기능 외에는 지원하지 않는다. 따라서 C++에서는 이러한 단점을 보완하기 위해 양방향 연결 리스트(doubly-linked list) std::list를 제공한다. 이를 사용하기 위해선 헤더파일을 임포트 해야 한다.구조 연속된 자료 구조와 연결된 자료구조 (2) with C++에서 그림을 하나 가져와보자.   보면 알겠지만, 노드끼리 서로 연결되어 있기 때문에 이전 노드를 가리키는 포인터, 다음 노드를 가리키는 포인터, 해당 노드에 있는 데이터를 갖고 있다. 간략하게 형태를 코드로 파악하자면 다음과 같다...

CS/자료구조 2023.03.31

[백준] 4673 with C++

문제설명 입출력 예제 개념 생성자가 없는 숫자인 셀프 넘버를 출력하는 문제다. 문제에서 알 수 있듯이 x라는 숫자가 있을 때, x의 각 자릿수들의 숫자와 x를 더한 숫자는 셀프 넘버가 아니게 된다. 따라서 bool 배열은 만들어 1부터 10000까지 상술한 규칙을 적용해, 해당하는 자리의 숫자를 true로 바꾼 후 false만 출력하면 된다. 풀이 풀이(1) string 이용하기 #include #include using namespace std; int main() { int num = 10000; bool selfnum[10000] = { false }; max 숫자인 10000을 num으로 초기화하고, selfnum를 체크할 bool 배열 selfnum[]을 초기화한다. for (int i = 1;..

Algorithm/백준 2023.02.16

[자료구조] vector with C++ (2)

std::vector 구현  이제부터 vector를 간단하게 구현해 보겠다. 우리의 목적은 크기가 유동적으로 조절되는 배열을 만드는 것이고, 용량은 1.5배씩 늘리도록 하겠다. #include using namespace std;templateclass vector{ T* _data = nullptr; // 데이터의 주소값 int _size = 0; // 크기 int _capacity = 0; // 용량 먼저 벡터에 담을 데이터의 주솟값과, 크기, 용량 변수를 초기화해준다. public: vector() { } // 기본 생성자 ~vector() // 소멸자 { if (_data) // 소멸자가 실행될 때 벡터 내에 데이터가 존재하면 delete[] _data; // 할당 해제 } 기본 생성자를 만..

CS/자료구조 2023.02.11

[자료구조] vector with C++ (1)

std::vector 지난 시간에 크기가 고정되는 배열 std::array에 대해 살펴보았다. 예고한 것처럼 C 스타일의 배열의 한계를 극복한 가변 크기 배열 std::vector에 대해 알아보자. 벡터는 Cpp reference에 다음과 같이 정의되어 있다.   직역하자면 연속적으로 저장되는 가변 배열이라는 의미다. 즉, 연속된 자료구조이며 크기를 늘리거나 줄여 원소를 변경할 수 있는 배열이라고 생각하면 되겠다. 이러한 벡터를 사용하기 위해서는 vector 라이브러리를 받아와서 다음과 같은 형태로 사용하면 된다. #include #include using namespace std;int main(){ vector v = { 1,2,3,4,5 }; // 크기가 5인 int형 가변 배열 vect..

CS/자료구조 2023.02.10