반응형

알고리즘 공부/C++ 387

[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 ..

[G4] 백준 1253번 좋다 C++ 투 포인터

리뷰 https://www.acmicpc.net/problem/1253set + map + 이분 탐색으로 접근했다가 자꾸 70%에 틀려서 투 포인터로 시도했더니 바로 AC되었다.N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있는 개수를 출력하는 문제 전역 변수n : 주어지는 정수의 개수ans : 정답을 저장할 변수nodes : 주어진 정수의 정보를 저장할 배열, 최대 크기는 2000이다. 함수없음  문제풀이n값을 입력 받고, nodes배열에 n개의 정수를 입력 받아준다.nodes배열을 오름차순으로 정렬해 준다.n번의 반복문을 수행해 주고, l을 0으로 r을 n - 1로 초기화 해준다.l이 r보다 작을 경우 반복문을 계속 수행해 준다.만약 l이 i와 같다면 l을 증가시키고 continue..

[G4] 백준 2138번 전구와 스위치 C++ 그리디 알고리즘

리뷰 https://www.acmicpc.net/problem/2138스위치를 누르면 현재 위치와 양쪽 방향의 전구가 모두 반전된다.스위치를 적절히 눌러 시작 전구의 상태에서 목표 전구의 상태까지 도달하고, 그 최소 횟수를 출력하는 문제  전역 변수n : 주어지는 전구의 개수ans1, ans2 : 케이스를 1, 2로 나누어 스위치를 누른 횟수를 저장할 변수 함수1. togglevoid toggle(string& f, int idx) 스위치를 클릭할 경우 전구의 켜짐과 꺼짐을 관리할 함수매개변수로 변경할 문자열의 포인터 f, 변경할 인덱스 idx를 받는다.만약 idx가 n - 1일 경우 문자열의 끝이므로 idx -1, idx의 전구를 반전시킨다.아닐 경우 idx -1, idx, idx + 1의 전구를 반전..

[S4] 백준 2960번 에라토스테네스의 체 C++ 소수 판정, 에라토스테네스의 체

리뷰 https://www.acmicpc.net/problem/2960솔브닷 마라톤에 떠서 풀어본 문제 전역 변수n, k : 주어지는 정수의 범위 n, k번째 지워진 수를 찾기 위한 변수 kv : 이미 지워진 수를 방문처리 하기 위한 정수형 배열 함수없음  문제풀이n ,k를 입력 받고, 지워진 숫자의 개수를 체크하기 위한 정수형 변수 idx를 0으로 초기화 한다.2부터 n까지 for문을 한번 돌리고, i부터 n까지 for문을 한번 더 돌려준다. 이때 증가값은 i여야 한다.만약 j가 이미 방문했던 정수라면 continue 처리를 해준다.방문하지 않은 정수라면 j에 방문처리를 해주고, idx를 증가시킨다.idx가 k에 도달했다면 j를 출력해주고 main 함수를 리턴 해준다. 참고 사항없음  정답 코드#inc..

[G4] 백준 9935번 문자열 폭발 C++ 문자열, 스택

리뷰 https://www.acmicpc.net/problem/9935알고리즘 분류를 보지 않고 풀었을 때는 string STL의 find + replace를 사용했었다.결과는 46%에서 멈추더니 시간 초과를 출력해냈다. replace메서드가 시간을 많이 잡아먹는다 하더라결국 스택으로 돌리고 구현을 했더니 이번엔 stack.size()가 문제였다.for문에 size를 사용할땐 왠만하면 정수형으로 치환한 후에 사용하도록 하자.. 전역 변수s, b : 탐색을 진행할 문자열 s, 폭발을 일으킬 문자열 bn, m : 문자열 s의 길이 n, 문자열 b의 길이 mstack : 스택으로 사용할 문자형 벡터 함수1. chkbool chk() 현재 스택에 폭발할 문자열이 있는지 여부를 체크하는 함수idx는 0, len은..

728x90
반응형