분류 전체보기 763

[G2] 백준 15559번 내 선물을 받아줘 C++ 깊이 우선 탐색

리뷰 https://www.acmicpc.net/problem/15559오랜만에 재밌는 문제를 풀었다.  전역 변수n, m : 맵의 세로/가로 크기를 저장할 변수ans : 그룹의 개수를 저장할 변수lst : 이동할 방향의 인덱스를 저장할 2차원 배열g : 그룹 정보를 저장할 2차원 배열G : 그룹 번호를 저장할 변수B :  재귀를 빠져나올 때의 그룹 번호를 저장할 변수dx, dy : 4방향 탐색을 위한 방향 배열 함수1. dfsvoid dfs(int x, int y) 깊이 우선 탐색을 통해 그루핑을 진행하기 위한 함수매개 변수로 탐색을 진행할 위치의 좌표 x, y를 전달 받는다.첫 번째 기저 조건으로 현재 위치의 그룹이 G와 동일할 경우 리턴해 준다.두 번째로 현재 위치의 그룹이 지정 되었으며 G보다 작..

[G4] 백준 17092번 색칠 공부 C++ 해시맵

리뷰 https://www.acmicpc.net/problem/17092어음.. 풀긴했는데 이게 맞나 싶다.  전역 변수n, m : 맵의 세로/가로 크기를 저장할 변수q : 검정색 칸의 개수를 저장할 변수dic : 검정색 칸의 개수가 0~9개인 부분 모눈종이의 개수를 저장할 해시맵lst : 맵 정보를 저장할 2차원 해시맵 함수없음  문제풀이n, m, q값을 입력 받고, dic의 0의 값을 (n - 2) * (m - 2)로 초기화 해준다.dic의 key 1 ~ 9의 value를 0으로 초기화 해준다.q번의 while 루프를 수행하고, 매 루프마다 검은색 칸의 좌표를 입력 받아준다.lst의 x, y좌표에 해당하는 값을 1로 저장해 준다.x, y좌표에서 주변 9칸의 3 * 3크기의 모눈종이를 순회하며 검은칸의..

[G3] 백준 11562번 백양로 브레이크 C++ 다익스트라, 플로이드 와샬

리뷰 https://www.acmicpc.net/problem/11562다익스트라로도 풀이가 가능한데 시간이 아슬아슬하다.  전역 변수n : 노드의 개수를 저장할 변수m : 간선의 개수를 저장할 변수k : 쿼리의 개수를 저장할 변수 함수없음  문제풀이n, m값을 입력 받고, n + 1 * n + 1크기의 2차원 벡터 dist를 매우 큰 값으로 초기화 해준다.m개의 간선 정보를 받아 dist벡터에 양방향 간선을 추가해 준다.이 때 만약 e가 0이면 반대 방향의 가중치는 1로, e가 1이면 양 방향 모두 가중치를 0으로 저장해 준다.간선 입력을 모두 받은 후엔 자기 자신으로 이동하는 가중치를 모두 0으로 저장해 준다.플로이드 와샬 알고리즘을 수행하여 각 노드간 최단 거리를 갱신하여 dist벡터에 저장해 준다..

[G4] 백준 12834번 주간 미팅 C++ 다익스트라

리뷰 https://www.acmicpc.net/problem/12834다익스트라 알고리즘을 통해 최단 거리를 구하는 문제  전역 변수n : KIST 기사단 팀원의 수를 저장할 변수v : 노드의 개수를 저장할 변수e : 간선의 개수를 저장할 변수a, b : KIST와 씨알푸드 노드 번호를 저장할 변수Edge : 간선의 이동할 노드 node, 가중치 val을 정의할 구조체edges : 간선 정보를 인접리스트로 저장할 Edge타입 벡터 배열lst : KIST 기사단의 노드 번호를 저장할 배열ans : 정답을 저장할 변수Pos : 이동 정보의 현재 노드 node, 누적 가중치 val을 정의할 구조체, val을 기준으로 오름차순 정렬한다. 함수1. dijkstraint dijkstra(int sn) 시작 노드로..

[G3] 백준 9470번 Strahler 순서 C++ 위상 정렬, 트리 맵

리뷰 https://www.acmicpc.net/problem/9470물이 가장 많이 고이는 노드의 값을 구하는 문제  전역 변수t : 테스트 케이스의 개수를 저장할 변수k : 테스트 케이스의 번호를 저장할 변수m : 노드의 개수를 저장할 변수p : 간선의 개수를 저장할 변수 함수없음  문제풀이t값을 입력 받고, t번의 while 문을 수행해 준다.매 테스트 케이스 마다 k, m, p에 값을 입력 받고, 2차원 벡터 edges배열을 m + 1크기로 초기화 한다.p개의 간선 정보를 입력 받아 edges벡터에 추가해 준다.정수형 벡터 cnt를 m + 1크기로 초기화 한다.1번 부터 m번 노드까지 순회하며 인접 리스트에 저장된 노드의 cnt를 1만큼 증가시켜 준다.정수형 큐 q를 초기화 하고, 트리 맵 벡터 ..

[G4] 백준 14950번 정복자 C++ 최소 스패닝 트리, MST

리뷰 https://www.acmicpc.net/problem/14950시작 노드로 부터 모든 노드를 잇는 최소 가중치를 구하는 문제  전역 변수n : 노드의 개수를 저장할 변수m : 간선의 개수를 저장할 변수t : 정복 시 가중치를 저장할 변수Edge : 간선의 시작 노드 sn, 도착 노드 dn, 가중치 w를 정의할 구조체, w를 기준으로 오름차순 정렬한다.edges : 간선 정보를 저장할 Edge타입 벡터nodes : 노드가 속한 그룹 명을 저장할 배열 함수1. Findint Find(int a) 노드가 속한 그룹의 루트 노드 번호를 찾기 위한 함수매개 변수로 탐색을 할 노드 번호를 변수 a로 입력 받아준다.만약 nodes[a]가 a와 동일하다면 a를 리턴해 준다.아닐 경우 nodes[a]를 Find..

[G4] 백준 14698번 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) C++ 우선순위 큐

리뷰 https://www.acmicpc.net/problem/14698C++로 푸려고 시도했는데 큐 내부 요소가 long long을 초과하는 경우 처리가 안떠올라서 그냥 파이썬으로 풀었다.  함수없음  문제풀이t에 테스트 케이스 개수를 받아주고, t번의 for문을 수행해 준다.매 테스트 케이스 마다 n에 요소의 개수, lst에 배열 정보를 입력 받는다.lst를 heapq객체로 만들어 준 뒤 빈 리스트 arr을 초기화 해준다.무한 루프를 수행하고, 힙에서 요소를 하나 빼내 변수 one에 저장해준다.만약 lst가 비었을 경우 break처리해 준다, 아니라면 요소를 하나 더 빼내 변수 two에 저장해준다.arr과 lst에 one * two값을 추가해 준다.while 루프가 중료된 경우 변수 ans를 1로 초..

[G4] 백준 5631번 방사능 C++ 정렬, 기하학, 이분 탐색

리뷰 https://www.acmicpc.net/problem/5631두 원의 내접에 존재하지 않는 집의 수를 구하는 문제, 교집합은 2배로 처리해 준다.  전역 변수n : 집의 개수를 저장할 변수Pos : 집의 위치 x, y좌표를 정의할 구조체lst : 집의 위치들을 저장할 Pos타입 배열adists, bdists : a, b원자력 발전소로 부터 모든 집 까지의 거리를 저장할 배열 함수1. getDistdouble getDist(int x, int y, int tx, int ty) 원자력 발전소와 집의 거리를 구하는 함수매개 변수로 집의 좌표 x, y와 원자력 발전소의 좌표 tx, ty를 전달 받는다.((x - tx)^2 + (y - ty)^2)^1/2를 계산하여 리턴해 준다. 문제풀이변수 c를 0으로..

[P2] 백준 7469번 K번째 수 C++ 세그먼트 트리, 이분 탐색, 머지 소트 트리

리뷰 https://www.acmicpc.net/problem/74696달만에 다시 들어와본 문제인데 쿼리문에서 merge없이 답을 도출할 방법을 고민해 보았다.  전역 변수N : 배열의 최대 크기를 저장할 상수 변수lst : 요소의 정보를 저장할 배열tree : 세그먼트 트리 정보를 저장할 벡터 배열n : 배열의 크기를 저장할 변수m : 쿼리의 개수를 저장할 변수 함수1. buildvoid build(int node, int s, int e) 세그먼트 트리 정보를 초기화 하기 위한 함수매개 변수로 노드 정보 node, 탐색 범위 s, e를 전달 받는다.리프 노드에 도달했을 경우 각 요소의 값으로 초기화 해준다.좌, 우 자식 노드로 재귀를 호출하며 두 노드를 merge하여 현재 노드에 정렬된 상태로 저장..

[G5] 백준 1038번 감소하는 수 C++ 구현

리뷰 https://www.acmicpc.net/problem/1038n번째 감소하는 수를 찾는 문제  전역 변수없음  함수없음  문제풀이n값을 입력 받는다, n이 9이하일 경우 n을 출력하고, n이 1022보다 클 경우 -1을 출력하고 리턴한다.변수 cur을 9로 초기화 하고, 변수 s를 "10"으로 초기화 한다.cur을 전위증가시킨 값이 n보다 작을 경우 while 루프를 수행한다.매 루프마다 s의 크기를 변수 idx에 저장하고, idx를 후위 감소 시키는 while 루프를 수행한다.s의 idx가 '9'라면 변수 l을 s.size()+1로 저장한 후 s를 clear시켜준다.l-1부터 0까지 순회하며 s에 i + '0'을 통해 내림차순 문자열을 만든 후 break처리해 준다.만약 idx가 0이거나 s의..

728x90