반응형

알고리즘 공부/C++ 381

[P5] 백준 1725번 히스토그램 C++ 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/1725주어진 히스토그램에 대해, 가장 큰 직사각형의 넓이를 구하는 문제세그먼트 트리를 활용해 히스토그램의 각 높이를 비교하고 구간에서 가장 작은 높이의 인덱스를 관리해 준다.query를 수행하며 각 구간에서의 가장 작은 높이를 가진 막대 기준으로 만들 수 있는 사각형의 최대 넓이를 구한다.  전역 변수n : 주어지는 히스토그램의 개수MAX_N : n이 입력될 수 있는 최대의 수, 10만으로 저장했다.nodes : 히스토그램의 정보를 저장할 정수형 배열, 크기는 MAX_N으로 초기화 한다.tree : 세그먼트 트리 정보를 저장할 정수형 배열, 크기는 MAX_N * 4로 초기화 한다. 함수1. buildvoid build(int node, in..

[G4] 백준 14499번 주사위 굴리기 C++ 구현, 시뮬레이션

리뷰 https://www.acmicpc.net/problem/14499맵 상에서 주사위를 굴려 맵과 주사위의 정보를 변경하고, 유효한 굴림 마다 주사위의 위쪽에 저장된 값을 출력하는 문제처음엔 각 구른 상태를 적절히 더하거나 빼주어 모듈러 연산을 하려 했으나 값이 일치하지 않았다.결국 전개도를 펼쳐 구현하였는데 오히려 이게 더 쉽고 빨랐던 것 같다.  전역 변수dx, dy : 주사위가 맵 상에서 움직이는 것을 구현하기 위한 방향 배열lst : 맵 정보를 입력 받을 정수형 2차 배열, 20 * 20 크기로 초기화 해준다.n, m : 맵의 세로 크기n, 맵의 가로 크기 msx, sy : 주사위의 시작 지점 x, y좌표를 받기 위한 변수k : 주사위를 굴릴 쿼리의 개수dice : 주사위의 각 면의 값을 저장..

[G2] 백준 21276번 계보 복원가 호석 C++ 위상 정렬, 해시맵, set

리뷰 https://www.acmicpc.net/problem/21276이를 기반으로 몇 개의 가문이 존재했는 지, 각 가문에 대한 정보를 출력하는 문제m값을 입력 받아놓고 for문을 n번 돌려서 틀렸다 ㅠ 전역 변수n, m : 이름의 개수 n, 부모 및 조상을 나타내는 간선의 개수 msum : 시조의 개수를 저장할 변수dic : 시조간 인접 리스트를 구현하기 위한 해시맵cnt : 이름 간 선순위가 필요한 경우의 수를 저장할 해시맵result : 이름 간 직계 자손을 저장하기 위한 해시맵q : 선순위가 더 이상 없는 이름을 저장하기 위한 큐sizo : 시조의 이름을 오름차순으로 정렬하기 위한 셋 함수1. input void input() 이름을 입력 받고 해시맵, 인접 리스트를 초기화 하기 위한 함수n을..

[G3] 백준 1644번 소수의 연속합 C++ 투 포인터, 에라토스테네스의 체

리뷰 https://www.acmicpc.net/workbook/view/8709주어진 값까지의 모든 소수를 구하고, 해당 소수 배열에서의 연속합이 주어진값과 일치하는 경우의 수의 개수를 구하는 문제  전역 변수n : 일치 시켜야 하는 정수를 저장할 변수ans : 소수의 연속합이 n값과 같은 케이스의 개수를 저장할 변수sosu : 에라토스테네스의 체를 사용하여 각 정수가 소수인지 여부를 저장할 정수형 배열, 크기는 400만 초과 함수없음  문제풀이n값을 입력 받고, n까지의 수 중 소수가 아닌 경우 sosu배열에 1로 표시해 준다.정수형 타입 벡터 sosus를 초기화 하고, 2 ~ n까지의 수에서 sosu배열 상 값이 0인 경우 추가해 준다.포인터로 사용할 정수형 변수 l, r을 각각 0으로 초기화 해준..

[G5] 백준 2668번 숫자고르기 C++ DFS, 브루트포스 알고리즘

리뷰 https://www.acmicpc.net/problem/2668백트래킹을 시도 했다가, n이 최대 100만에 걸려 시간 초과가 출력되었다.문제를 보다 보니 첫째줄은 노드를, 둘째줄은 간선을 통해 다른 노드로 이동하는 것으로 보였다.모든 정점에서 DFS를 진행하여 싸이클이 발생하면 자신을 ans에 추가하는 식으로 구현하였다.  전역 변수n : 주어지는 노드의 개수lst : 주어지는 간선의 정보를 저장할 정수형 배열v : 방문 처리를 하기 위한 정수형 배열ans : 싸이클이 발생한 노드 정보를 추가할 정수형 벡터 함수1. dfsvoid dfs(int s, int e) 시작 지점으로부터 간선을 타고 노드를 순회하며 사이클 발생 여부를 체크할 함수기저 조건은 이미 방문한 노드를 재 방문한 경우이다.이때 ..

[L3] 프로그래머스 가장 먼 노드 C++ 다익스트라, 최단 경로

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하는 문제다익스트라로 모든 노드까지의 최단 거리를 구한 후, 해당 노드 중 거리가 최대값인 노드를 찾는다.최대값과 동일한 값을 같는 거리를 가진 노드의 개수를 출력해 주었다.  전역 변수nodes : 노드의 개수를 저장할 변수lst : 노드간 인접 리스트를 저장할 정수형 벡터 배열, 노드의 최대 갯수인 2만보다 크게 해주어야 한다.Pos : 다익스트라의 탐색용 구조체, 우선순위 큐용 오름차순 cmp함수를 정의했다. 함수1. dijkstraint dijkstra() 1번 노드로부터 모든 노드까지의 거리를 ..

[L3] 프로그래머스 여행경로 C++ DFS, 해시맵, 우선순위 큐

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해시맵을 통해 각 공항을 저장해 주고, ICN으로 부터 출발해 모든 항공권을 사용하여 모든 도시를 방문하는 문제예제의 경우 모두 맞았지만 테스트 케이스에서 반만 맞는 경우가 생겼다.answer에 공항 이름을 추가하는 로직을 후위로 위치하니 AC를 맞게 되었다.  전역 변수dic : 각 공항에서 이동할 수 있는 공항 정보를 오름차순으로 정렬하는 해시맵answer : 공항에 방문한 순서를 저장할 문자열 벡터 함수1. dfsvoid dfs(string s) 깊이 우선 탐색을 통해 공항을 방문하며 정답에 기록할 함수매개변수 s를 공항의 이름으로 받는다. 초기..

[L3] 프로그래머스 아이템 줍기 C++ BFS, 좌표 확장

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2차원 좌표 평면에서 주어진 사각형의 테두리만 타서 목표에 도달하여 아이템을 줍는 문제선분을 타고 이동하는 문제는 대체로 좌표를 확장하여 문제를 푸는 것 같다.  전역 변수v : 이동한 좌표를 방문처리를 해주기 위한 정수형 배열, 최대 크기의 2배인 101 * 101로 초기화 한다.lst : 맵 정보를 초기화 하기 위한 정수형 배열, 크기는 상동dx, dy : 상하좌우 이동을 위한 방향 배열Pos : 너비 우선 탐색 시 현재 위치 정보와 소요 시간을 저장하는 구조체 함수1. bfsint bfs(int sx, int sy, int ex, int ey) ..

[G5] 백준 7490번 0 만들기 C++ 백트래킹, 브루트포스 알고리즘, 구현, 문자열

리뷰 https://www.acmicpc.net/problem/7490어렵진 않은데 공백이라는 조건 때문에 생각해야 하는 케이스가 많아서 구현에 시간이 좀 걸리는 문제1부터 N까지의 수를 오름차순으로 쓴 수열 1 2 3 ... N에서 '+'나 '-', 또는 ' '(공백)을 숫자 사이에 삽입하여 수식을 만들고, 이렇게 만든 수식의 값을 계산하고 그 결과가 0이 되는 케이스를 문자열로 출력해야 한다.  전역 변수t, n : 테스트 케이스의 개수 t, 각 테스트 케이스 마다 주어지는 수열의 길이 nans : 정답을 저장할 문자열 벡터char : +, -, 공백등의 연산자를 저장할 문자형 벡터 함수1. calcint calc() 입력 받은 연산자를 토대로 계산을 하여 나온 결과값을 리턴하는 함수1의 경우 무조건..

[G4] 백준 16234번 인구 이동 C++ 구현, 시뮬레이션, BFS

리뷰 https://www.acmicpc.net/problem/16234모든 나라의 인구 차이가 L이상 R이하 범위 일때까지 인구를 이동시키는 문제뇌 빼고 구현하긴 했는데 시간이 꽤 많이 걸려서 아마 더 최적해가 있을 듯 하다. 전역 변수n : 땅의 한 변의 길이를 저장할 변수l, r : 각 나라당 인구 차이의 범위를 저장할 변수idx : 각 나라를 그룹으로 묶을때 사용할 변수ans : 몇일간 인구 이동이 진행되는지를 저장할 변수lst : 각 나라의 인구 수를 저장하기 위한 정수형 배열, 최대 50 * 50크기v : 각 나라가 속한 그룹을 저장하기 위한 정수형 배열, 최대 50 * 50크기dx, dy : 4방향 탐색을 진행할 방향 배열Pos : 시뮬레이션 시 현재 x, y좌표를 저장하기 위한 구조체VC ..

728x90
반응형