본문 바로가기

백준32

BOJ 1756 - 피자굽기(C++) https://www.acmicpc.net/problem/1756 1756번: 피자 굽기 첫째 줄에 오븐의 깊이 D와 피자 반죽의 개수 N이 공백을 사이에 두고 주어진다. (1 ≤ D, N ≤ 300,000) 둘째 줄에는 오븐의 최상단부터 시작하여 깊이에 따른 오븐의 지름이 차례대로 주어진다. 셋 www.acmicpc.net 피자마다 오븐의 모든 지름을 탐색하는 완전 탐색의 경우 O(N*M)으로 300000의 데이터들을 탐색하면 시간 초과가 발생 이를 해결하기 위해 그리디 알고리즘을 적용하였으며, 풀이 후 검색해보니 이분탐색으로도 해결할 수 있다하여 이분탐색으로도 풀이 해봄 풀이 오븐의 너비는 이전 위치보다 현재 위치의 너비가 크다고해도 이전위치의 너비보다 큰 피자가 들어올 수 없다 더보기 ex) {3,.. 2021. 8. 26.
BOJ 17142 - 연구소3(C++) https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 풀이 0. 입력데이터에서 바이러스의 위치, 2번의 완료조건(바이러스가 퍼져야하는 방의 수)를 저장 1. 입력 데이터의 바이러스 중 M개의 바이러스를 활성화 - 모든 바이러스중 M개를 선택하여 모든 경우의 수에 대해 시뮬레이션(브루트포스) 2. 활성 상태의 바이러스는 상하좌우로 전파되며 모든 빈칸에 바이러스가 퍼지는 최소 시간을 구함 - 1에 대한 모든 경우의 수에 bfs를 이용하여 바이러스가 퍼지는 시간을.. 2021. 8. 25.
BOJ 1405 - 미친로봇(C++) https://www.acmicpc.net/problem/1405 1405번: 미친 로봇 첫째 줄에 N, 동쪽으로 이동할 확률, 서쪽으로 이동할 확률, 남쪽으로 이동할 확률, 북쪽으로 이동할 확률이 주어진다. N은 14보다 작거나 같은 자연수이고, 모든 확률은 100보다 작거나 같은 자 www.acmicpc.net 풀이 N이 14보다 작거나 같기 때문에 시작점을 (14, 14)로 설정 dfs를 사용하여 해당방향으로 갈 확률을 곱해주는 방식으로 진행 더보기 ex) 테스트 케이스 N=2, [25, 25, 25, 25]의 경우 : (동서남북의 확률이 같아 처음 한방향의 확률값 x 4로 계산 가능) 1/4 x (1/4 + 1/4 +1/4) x 4 = 0.75 절대/상대 오차는 10-9 -> 소수점 아래 10자리.. 2021. 8. 24.
BOJ 21608 - 상어초등학교(C++) https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 자리를 정하는 것에 대한 조건 1. 비어있는 칸 중에 좋아하는 학생이 인접한 칸에 많은 칸으로 정함 2. 1을 만족하는 것이 여러 개라면, 인접한 칸중에 비어있는 칸이 가장 많은 칸으로 정함 3. 2를 만족하는 칸도 여러개인 경우, 행의 번호는 가장 작은 칸으로, 그러한 칸도 여러개라면 열의 번호가 가장 작은 칸으로 정함 풀이 1. 자리 정하기와 점수계산를 위해 학생마다 좋아하는 학생의.. 2021. 8. 19.
BOJ 10216 - Count Circle Groups(C++) https://www.acmicpc.net/problem/10216 10216번: Count Circle Groups 백준이는 국방의 의무를 수행하기 위해 떠났다. 혹독한 훈련을 무사히 마치고 나서, 정말 잘 생겼고 코딩도 잘하는 백준은 그 특기를 살려 적군의 진영을 수학적으로 분석하는 일을 맡게 되었 www.acmicpc.net 풀이 노드별 거리 비교를 위한 2중 for문 통신 가능 확인 (p1.x-p2.x)² + (p1.y-p2.y)² T; for (int _ = 0; _ > N; int ans = N; int X, Y, R; memset(parent, -1, sizeof(parent)); for (int idx = 0; idx < N; idx++) .. 2021. 8. 16.