본문 바로가기
728x90
반응형

스터디/알고리즘15

[C++] vector를 이용하여 그래프를 인접리스트로 구현하기 vector adj[10]; vector *adj = new vector[MAX_V]; // 개인적으로 좋아하는 표현 vector adjList(N, vector()); https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 이 문제로 그래프를 표현하면 int N, M; cin >> N >> M; vector* adj = new vector[N + 1]; for (int i = 0; i <.. 2022. 10. 1.
BOJ 19238 스타트 택시 DFS/BFS 알고리즘과 시뮬레이션이 합쳐진 구현 문제이다. 세부조건이 까다로워서 처음부터 간결한 코드를 작성하는 것이 요구된다고 생각한다. 그래서 구조체 대신에 클래스를 이용하여 복잡한 변수를 초기화하고, 클래스의 연산자 오버로딩으로 정렬 우선순위를 재정의할 수 있었다. "알고리즘 경력이 많은 백준은 특정 위치로 이동할 때 항상 최단경로로만 이동한다." → BFS 알고리즘 이용 "백준이 태울 승객을 고를 때는 현재 위치에서 최단거리가 가장 짧은 승객을 고른다. 그런 승객이 여러 명이면 그중 행 번호가 가장 작은 승객을, 그런 승객도 여러 명이면 그중 열 번호가 가장 작은 승객을 고른다." → 우선순위를 정하면 1. 아직 도착지로 가지 못한 승객 2. 택시와의 최단거리가 가장 짧은 승객 3. 행 번호가 .. 2022. 9. 7.
[BOJ 12100] 2048(Easy), Python 4%에서 틀렸습니다를 맞고 코드를 수정하여 해결했다. 여기서 틀리면 숫자를 합칠때 이미 합쳐진 숫자는 다시 합쳐지지 않는다는 것을 잘못 구현했기 때문이다. (그림12 -> 그림13의 설명을 다시 읽어보자) 유틸리티 함수 print_board() 숫자블록들을 모두 출력하는 함수. board_copy() 현재 숫자블록들을 복사하여 새로운 블록을 반환하는 함수. isChange() 블록을 상하좌우로 이동시킨 후 변화가 있는지 확인하는 함수. 변화가 없다면 더 이상 탐색할 필요가 없다. getMaxValue() 2차원 블록에서 가장 큰 값을 반환하는 함수. 블록을 이동하는 함수 sliding() 1차원 배열을 왼쪽으로 이동시키는 함수. 이 1차원 배열은 column이나 row가 된다. slide_up/left/.. 2022. 7. 6.
728x90
반응형