C++

알고리즘/백준(BOJ)

[백준/C++] 15683번 감시

https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 오랜만에 푼 구현 + 브루트 포스 + 백트래킹 문제이다. 문제 자체는 크게 까다롭지 않지만, 백트래킹에서 고민을 좀 많이 하였고 결국 다른 글을 참고하게 되었다..(시무룩) 1. 입력을 받는다 (CCTV가 나오면 해당 좌표를 벡터에 담아준다!) 2. 완전 탐색을 실시한다. 3-1. 만약 모든 CCTV를 확인하여, 감시 구역을 정했으면 사각지대의 수를 세서 최솟값을 저장한다. 3-2. 아..

알고리즘/백준(BOJ)

[백준/C++] 1461번 도서관

https://www.acmicpc.net/problem/1461 1461번: 도서관 세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책 www.acmicpc.net 문제가 한번에 이해가 안될수도 있으니,, 꼼꼼히 읽어보셔야 한다. 우선, 이 문제는 누가봐도 정렬과 그리디 알고리즘이다. 이 문제를 풀 때 3가지 key point가 있다고 생각한다. 1. 음수부분과 양수부분을 구별 (음수의 개수 세기) 2. m개의 책을 들고 다닐 수 있으므로 m칸씩 이동 3. 맨 끝 값(제일 작은 음수, 제일 큰 양수) 중 절댓값이 더 큰 것을 마지막에 방문 (= 되돌아올 필요 없으..

알고리즘/백준(BOJ)

[백준/C++] 1068번 트리

https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 간단한 트리 + dfs 문제이다. 그런데 이 문제는 문제를 잘 읽어야한다. 이진트리도 아니며, 입력으로는 노드가 순서대로 주어지는 것이 아니라 노드의 부모가 주어진다. 그리고 꼭 0번 노드(첫 입력)가 root노드인 것은 아니다! -1(부모가 없는 경우)이 입력으로 들어올 때 해당 노드가 트리의 root이다. 예제 1번이 문제의 그림과 동일하므로 천천히 비교해보시길 바란다. 우선 트리를 입력..

알고리즘/백준(BOJ)

[백준/C++] 2470번 두 용액

https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net N이 최대 100,000까지 입력이다. 하나하나씩 다 계산해가며 비교하면 100,000 x 100,000으로 1초안에 절대 풀 수 없게 된다. 그래서 이 문제는 이분탐색의 개념과 투 포인터를 활용한다. 우선, 배열을 쭉 오름차순으로 정렬한 뒤 (오름차순으로 정렬하면 음수는 절댓값이 큰 것이 앞에 오고, 양수는 절댓값이 큰 것이 뒤로 간다.) 두 개를 더 했을 때 ..

알고리즘/백준(BOJ)

[백준/C++] 16936번 나3곱2

https://www.acmicpc.net/problem/16936 16936번: 나3곱2 나3곱2 게임은 정수 하나를 이용한다. 가장 먼저, 정수 x로 시작하고, 연산을 N-1번 적용한다. 적용할 수 있는 연산은 두 가지 있고, 아래와 같다. 나3: x를 3으로 나눈다. x는 3으로 나누어 떨어져야 www.acmicpc.net 어려워 보이지만 차근차근 따져보면 쉽게 풀리는 문제이다. 이 문제에서 가능한 연산은 오직 나누기3과 곱하기2 뿐이다. 그렇다면, 맨 앞에는 어떤 수가 와야할까? -> 인수3을 가장 많이 가지고 있는 숫자가 맨 앞에 와야한다! 왜 그럴까? 6 9를 예시로 보자, 6에서 9를 만들 수 있을까 라고 물어보면 답은 절대 불가능하다 이다. 15와 9를 예시로 들어도 마찬가지이다. 1. 곱..

알고리즘/백준(BOJ)

[백준/C++] 2589번 보물섬

https://www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net 오랜만에 푼 bfs 문제이다. 보물의 위치가 정해져있지 않기 때문에, 브루트포스를 이용하여 보물의 위치를 정해주는 것이 필요하다. 모든 육지(L)에 대해 bfs 탐색을 진행해주는데, 첫번째 L에 대해 bfs 탐색을 하고 얻게 된 가장 긴 길이가 5라고 할 때, bfs함수는 5를 반환하고 ans 변수에 저장한다. 지도를 초기화해준뒤, 2번째로 만나는 L에 대해 bfs 탐색을 하고 얻게 된 가장 긴 길이..

beomseok99
'C++' 태그의 글 목록 (3 Page)