전체 글 50

[C++] 우선순위큐 - 최대힙, 최소힙

우선순위큐(priority queue)우선순위큐(default 최대 힙)는 삽입된 요소에 대해 우선순위가 높은 데이터를 먼저 가져오는 형식의 자료구조다. 우선순위큐는 주로 힙 자료구조를 기반으로 구현된다. 힙(heap)힙은 완전이진트리의 일종으로 우선순위큐를 위해 만들어진 자료구조다.최대값/최소값을 빠르게 찾아내도록 만들어졌다.최대힙에서는 최대값, 최소힙에서는 최소값을 O(1)의 시간복잡도로 빠르게 접근할 수 있다.삽입과 삭제 연산은 트리의 높이에 비례하기 때문에 O(log N)의 시간복잡도를 가진다.이진탐색트리에서는 중복된 값을 허용하지 않는 반면 힙 트리에서는 중복된 값을 허용한다.힙은 최대힙과 최소힙 형태로 나뉜다. 최대힙부모노드의 키 값이 자식노드의 키 값보다 크거나 같은 완전이진트리부모노드의 키..

구조체와 공용체의 차이

구조체와 공용체는 C와 C++에서 제공되는 사용자 정의 데이터 타입이다. 둘 다 여러 개의 멤버 변수를 가질 수 있지만, 메모리 할당 방식과 데이터 저장 방식에 차이가 있다. 메모리 할당 방식구조체는 각 멤버 변수가 별도의 메모리 공간을 차지하므로 구조체의 크기는 모든 멤버 변수가 차지하는 메모리 공간의 합과 같다.#include typedef struct student { int age; double weight; char gender;} Student;int main() { Student je; printf("%p %p %p\n", &je.age, &je.weight, &je.gender); // 0x16fdb7430 0x16fdb7438 0x16fdb7440 prin..

C++ 2024.10.13

[C++] 나눗셈에서 소수점 포함하기

C++에서 정수끼리의 나눗셈에서 소수점이 버려지고 정수 값만 리턴되는 현상이 나타난다.#include using namespace std;int main() { int dividend = 10; int divisor = 3; double result = dividend / divisor; cout  10 / 3의 결과를 10.3333... 으로 기대하지만 실제 출력은 3으로 나타난다. 소수점이 버려지는 이유는 C++의 데이터 타입과 관련이 있다. C++에서 데이터 타입은 정수형과 실수형으로 나뉘며, 각 타입은 서로 다른 방식으로 연산을 처리한다.정수형 데이터 타입: int, short, long, long long, ...실수형 데이터 타입: float, double, ...정수형 피연산자들끼리의 나눗셈..

C++ 2024.10.08

[C++] N차원 배열 선언 방법

C++ 알고리즘 풀이 시, 2차원 배열 선언 방법과 각각의 특징에 대해 설명해보려 한다. 실행 중 배열 크기를 결정할 수 있는 동적 벡터 방식과 컴파일 시 크기를 고정하는 정적 배열 방식이 있다.vector 이용// R*C 크기의 2차원 vectorvector > board(R, vector(C));// a*b*c 크기의 3차원 vectorvector > > board(a, vector>(b, vector(c))); vector는 C++의 STL에서 제공하는 동적 배열로, 위 방법은 배열의 크기를 동적으로 설정하여 2차원 벡터를 생성하는 방식이다. 배열의 크기를 프로그램이 실행될 때 결정할 수 있기 때문에 유연성이 높다. 불필요한 초과 할당이 발생하지 않아 메모리 효율성이 좋다. 하지만 속도 측면에서 v..

C++ 2024.10.08

[C++] 시간초과 해결방법

ios_base::sync_with_stdio(false);ios_base는 입출력 스트림의 기반 클래스로 cin, cout과 같은 표준 입출력 객체들은 ios_base에서 상속받아 동작한다. C++에서 입출력 작업을 수행할 때, 기본적으로 C++ 표준 입출력(iostream)과 C의 표준 입출력(stdio)이 동기화되도록 설정되어 있어서 이 과정에서 딜레이가 발생하여 성능이 저하된다. ios_base::sync_with_stdio(false) 코드를 추가하여 C++ 표준 스트림과 C 표준 스트림 간의 동기화를 비활성화시켜 독립적인 버퍼로 작동하게 만들어 실행속도를 개선할 수 있다. 이 설정 이후에는 C와 동기화가 해제되었기 떄문에 C의 표준 입출력 방식(scanf, printf, gets. puts)..

C++ 2024.09.20

[Java] final 키워드

Java에서 final 키워드는 불변성 보장을 위해 변수, 메서드, 클래스 등 여러 요소에 붙여 사용하며, 각 경우에 따라 의미가 달라진다. 공통적으로 예기치 않게 수정되는 것을 방지함으로써 의도된 동작을 보장한다. 변수변수에 final을 사용하면 해당 변수의 값은 수정할 수 없다. 그렇기 때문에 초기화는 필수적이다. 선언하는 즉시 초기화하지 않아도 되지만 해당 변수를 사용하기 전에 반드시 한 번 초기화해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.final int birth = 2024;birth = 2025; // 컴파일 오류: 재할당 불가능// orclass TestClass { final int birth; TestClass(int birth) { this.birth ..

[Python] zip 함수 정리

zip 함수zip 함수는 iterable 객체를 인자로 받아 동일한 인덱스의 요소를 튜플로 묶어서 반환한다.python에서 iterable한 자료형으로 리스트, 튜플, 문자열 등이 있다.nums = [1, 2, 3]char = ['a', 'b', 'c']pairs = zip(nums, char)print(list(pairs)) # [(1, 'a'), (2, 'b'), (3, 'c')] zip 함수로 넘기는 인자의 길이가 다를 경우, 가장 짧은 인자의 길이에 맞춰서 반환한다.list1 = [1, 2, 3]list2 = ['a', 'b']list3 = [True, False, True, False]pairs = zip(list1, list2, list3)print(list(pairs)) # [(1, 'a'..

Algorithm 2024.07.30

[백준] 2668 숫자고르기 python 풀이

문제난이도: 골드5알고리즘 분류: 깊이 우선탐색요약: 첫째 줄의 집합과 둘째 줄의 집합을 이루는 수가 일치하면서 최대한 많은 수를 뽑을 때, 뽑힌 정수들에 대한 정보 출력하기 풀이입력 정보를 받아 그래프를 만들고 사이클이 발생하는 노드를 알아내어 문제를 해결한다. 이를 위해 dfs를 사용하여 각 노드에서 출발하는 사이클을 탐색한다. 인접 리스트로 정보 저장 첫째 줄과 둘째 줄의 숫자 관계를 그래프로 표현하여 같은 수로 이루어진 집합을 찾아야 한다. 입력을 인접 리스트 형식으로 변환하여 저장한다. 첫째 줄의 숫자를 노드로, 그와 일치하는 둘째 줄의 숫자의 위치를 간선으로 표현하여 각 노드의 이웃 노드들을 저장한다.  예제 입력에 따른 그래프 관계를 나타내면 다음과 같다.12345673115546  gr..

Algorithm/Baekjoon 2024.07.10

[Python] 그래프 - 위상 정렬 알고리즘

위상 정렬순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘방향 그래프의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열하는 것위상 정렬을 수행하게 되는 예시: 선수과목을 고려한 학습 순서 결정 진입 차수 / 진출 차수진입 차수(Indegree): 특정 노드로 들어오는 간선의 개수진출 차수(Outdegree): 특정 노드에서 나가는 간선의 개수 위상 정렬 알고리즘큐를 이용한 동작 과정이다.진입차수가 0인 노드를 큐에 넣는다.큐가 빌 때까지 다음의 과정을 반복한다.i) 큐에서 원소를 꺼내 해당 노드에서 출발하는 간선을 그래프에서 제거한다.ii) 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.이때 모든 원소를 방문하기 전에 큐가 빈다면 사이클이 존재한다고 판단할 수 있다..