본문 바로가기

분류 전체보기

(89)
2024-02-25 -동물원(12907, Baekjoon) 규칙을 찾아 조건에 맞게 구현하는 간단한 문제였다. 동물의 종류는 토끼와 고양이밖에 없음으로, 똑같은 숫자가 2개를 넘어선 안되며, 0부터 연속하여 1씩증가하는 수로만 이루어져 있어야한다.(0, 1, 2, 3, 5같은 경우는 중간에 4가 빠져서, 안됨) 나는 입력받은 수들중 가장 큰 수를 mx변수에 담았다. 0부터 mx까지 반복하며, 한번도 나오지않은 수가있다면, 0 출력, 그전수보다 현재수가 더 많이(0, 1, 1 같이 0이 1번, 1이 2번나와 자신보다 1작은수의 개수보다 자신의 개수가 많은 경우는 불가능하다)나왔다면, 0을 출력하였다. 모두 처리 후, 남은 수들로 만들 수 있는 조합을 구하였다. 더보기 #include #include int n; int cnt..
2024-02-24 -효율적인 해킹(1325, Baekjoon) 한번의 해킹으로 최대한 많은 컴퓨터를 해킹해야 함으로, 한 컴퓨터에서 BFS탐색을 하여, 몇개의 컴퓨터를 해킹 할 수 있는 지를 알아보는 단방향 그래프탐색 문제였다. 처음에 N범위가 10^4라서, 완전 탐색을 하면, O(n^2)이 걸려 시간초과가 아닐까 싶었지만 문제의 시간제한이 5초로 넉넉하기 때문에 괜찮았다. 더보기 #include #include #include using namespace std; int n, m; vector vec[10010]; int ch[10010], cnt[10010]; void BFS(int x) { int i, j; queue q; q.push(x); ch[x] = 1; while (!q.empty()) { int now =..
<Baekjoon> Z#1074 문제 : https://www.acmicpc.net/problem/1074무엇을 구하는 문제인가?n이 주어졌을 때, 2^n * 2^n의 정사각형에서 4등분 후 문제에서 주어진 순서대로 탐색할 때, (r, c)는 몇번째로 나오는지 구하는 문제이다.​해결 전략4등분으로 분할하여, 문제에서 주어진 순서대로 호출하면 되는 간단한 문제이다.4등분하여, r, c가 포함될 때만 호출하여 주었다.​알고리즘1. n, r, c를 입력받는다.2. Divde(초기 x, 초기 y, 길이)를 (0, 0, 2^n)을 초기값으로 함수를 호출하여준다.3. 함수내에서 4등분 후 문제의 조건대로 차례로 호출하여준다.4. x좌표, y좌표가 같다면 ans에 지금의 번지수를 넣어준다.5. ans 출력​※주의 할점전체탐색을 해서는 안된다.  r..
<JUNGOL > 환경부의 나무 심기 프로젝트 #5804 문제 : https://www.jungol.co.kr/problem/5804 무엇을 구하는 문제인가? N개의 가로수를 심을 수 있는 위치와 C개의 나무가 주어졌을때, 나무 사이의 간격을 최대로하여 나무를 심고싶다. 이때의 나무 사이의 거리의 최댓값을 구하는 문제이다. ​ 해결 전략 -나무사이의 최대거리를 이분탐색으로 찾았다. -나무사이의 최대거리가 k일때, 심을 수 있는 최대 나무의 수를 mid_res로 두고 탐색함. ​ 알고리즘 1. N, C, 그리고 N개의 나무를 심을 수 있는 위치를 입력받는다. 2. 나무를 심을 수 있는 위치배열(x)를 sort해준다. 3. low = 1, high = x[n-1] - x[0]으로 한다. 4. low high = mid - 1 -아니면 low = mid + 1 5...
<JUNGOL > 숫자구슬(easy) #4791 문제 : https://www.jungol.co.kr/problem/4791 무엇을 구하는 문제인가? ​M개의 그룹으로 주어진 구슬을 나눌때, 그룹들 각각의 합중 가장 큰 수가 가장 최소가 될수있도록 그룹을 나눌려한다. 이때 의 최솟값을 구하는 문제이다. ​ 해결 전략 -각 그룹의 합들중 최대값이 최소가 되야함으로, 각그룹의 합의 최대 마지노선을 k라 정한뒤 k를 이분탐색을 이용하여 찾아주었다. -low는 arr(그룹에적힌 수)들중 최댓값으로, high = 전체 arr의 합으로 정하였다. ​ 알고리즘 1. n, m을 입력받고, n개의 구슬에 적힌 수를 입력받는다.(arr) 2. low = arr중 최댓값, high = 전체 arr의 합으로 한다. 3. low 가 high 보다 작은동안 반복 -mid = ..
<JUNGOL > 모자이크#1219 문제 : https://www.jungol.co.kr/problem/1219 무엇을 구하는 문제인가? 한변이 k인 정사각형 모양의 색종이 n개를 이용해 잘못칠해진 부분을 모두 가릴때, k의 최솟값을 구하는 문제이다. ​ 해결 전략 k를 mid로 생각해 푸는 간단한 이분탐색 문제이다. 입력받을때, 잘못칠해진 부분의 높이는 최댓값만 필요하며, 그 최댓값은 low로 한다. 입력받은 좌표를 x기준 정렬 후, 탐색 ​ 알고리즘 1. 최대좌표의 값 mx, my를 입력받는다. 그 후 색종이의 수 n과 얼룩의 수 m또한 입력받는다. 2. m개의 얼룩의 x값을 저장, y는 최댓값만 저장하며 입력받는다. 3. low = maxy값, high = 최대 x값으로 한다. 4. x좌표를 정렬한다. 4. low가 high보다 작은..
<JUNGOL > 나무꾼 미르코 #5170 문제 : https://www.jungol.co.kr/problem/5170 무엇을 구하는 문제인가? n개의 나무가 주어졌을 때, k이상 높이의 부분을 모두 잘라내 붙여 길이를 m이상으로 만들려 한다. 이때 최소 k값을 구하는 문제. ​ 해결 전략 N범위가 1,000,000으로 굉장히 크다. 따라서 완전 탐색보다는 이분탐색이 좀 더 좋아보인다. 찾아야되는 k값을 이분 탐색을 통해 찾으면 된다. ​ 알고리즘 1. n과 m을 입력받고, n개의 나무의 높이 arr을 입력받는다. 2. low = 1, high = 가장높은 나무의 높이로 선언한다. 3. low 가 high보다 작거나 같은동안 반복 -mid = (low+high)/2 -mid_res는 k에 mid가 들어갈 경우의 모두 잘라붙인 길이로 선언한다. -..
<JUNGOL > 확률#5805 문제 : https://www.jungol.co.kr/problem/5805 무엇을 구하는 문제인가? 이미 X번 던져 Y번 앞면이 나왔다. 이때 몇번 앞면이 나와야 확률이 바뀌는 지 최소 횟수를 구하는 문제. ​ 해결 전략 -n범위가 굉장히 큼으로 완전 탐색은 불가능하고, 이에 따라 이분탐색을 생각해볼 수 있다. -현재 확률인 (y*100)/x를 변수now_p에 저장하고, ((y+mid)*100)/(x+mid)가 now_p에 근사할때 까지 이분탐색을 진행한다. ​ 알고리즘 1. x, y를 입력받는다. 2. (y*100)/x를 변수now_p에 저장한다. 3. 2분탐색에서 필요한 low = 1, high = 2e9(20억 = 최대입력값의 2배)로 선언한다. 4. low low = mid + 1 -아니면 ->..