백준
-
백준 1927 - 최소 힙백준 algorithm 2022. 4. 6. 23:16
입력 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. x는 231보다 작은 자연수 또는 0이고, 음의 정수는 입력으로 주어지지 않는다. 출력 입력에서 0이 주어진 횟수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다. 예제 입력 1 복사 9 0 12345678 1 2 0 0 0 0 32 예제 출력 1 복사 0 1 2 12345678 0 => 최대힙의 반대로 최소힙문제입니다. => queue 헤더안에 있..
-
백준 11279 최대힙 C++백준 algorithm 2022. 4. 2. 23:58
예제 입력 1 복사 13 0 1 2 0 0 3 2 1 0 0 0 0 0 예제 출력 1 복사 0 2 1 3 2 1 0 0 => 최대힙을 구현할 수 있는지에 대한 문제였습니ㅏㄷ. => C++에는 queue 헤더 안에 priority_queue 자료형을 사용 할 수 있습니다. => 해당 자료형을 이용해서 주어진 조건에 따라 출력문을 출력하면 되는 문제였습니다. => 시간초과가 걸릴 경우, cin.tie(0); ios_base::sync_with_stdio(false); 해당 구문을 입력해줄 경우 시간초과에 걸리지 않게 됩니다. #include #include #include #include #include #include #include #include #include using namespace std; i..
-
백준 2606 바이러스 C++백준 algorithm 2022. 3. 31. 01:16
입력 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어진다. 이어서 그 수만큼 한 줄에 한 쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터의 번호 쌍이 주어진다. 출력 1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 첫째 줄에 출력한다. 예제 입력 1 복사 7 6 1 2 2 3 1 5 5 2 5 6 4 7 예제 출력 1 복사 4 => DFS 문제입니다. => 주어진 정점과 간선들은 배열을 통해 구현해두어야합니다. => arr[MAX][MAX] : 간선을 표현한 배열 => 각 정점이 연결되어 있을 경우 '1'로 표현..
-
백준 7576 - 토마토 C++백준 algorithm 2022. 3. 29. 23:15
입력 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다. 토마토가 하나 이상 있는 경우만 입력으로 주어진다. 출력 여러분은 토마토가 모두 익을 때까지의 최소 날짜를 출력해야 한다. 만약, 저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력해야 하고, 토마토가 모두 ..
-
백준 2178 - 미로탐색 C++백준 algorithm 2022. 3. 28. 17:45
입력 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. 출력 첫째 줄에 지나야 하는 최소의 칸 수를 출력한다. 항상 도착 위치로 이동할 수 있는 경우만 입력으로 주어진다. 예제 입력 1 복사 4 6 101111 101010 101011 111011 예제 출력 1 복사 15 예제 입력 2 복사 4 6 110110 110110 111111 111101 예제 출력 2 복사 9 예제 입력 3 복사 2 25 1011101110111011101110111 1110111011101110111011101 예제 출력 3 복사 38 예제 입력 4 복사 7 7 1011111 1110001 1000001 10000..
-
백준 1806 - 부분합백준 algorithm 2021. 11. 1. 23:02
=> 투 포인터 알고리즘의 개념을 알면 풀 수 있는 문제입니다. (저도 이 문제를 풀면서 처음으로 해당 알고리즘을 들었습니다.) => start 점과 end 점의 위치를 변환해가며 S의 값을 넘으면 가장 적은 길이를 찾아내는 방법입니다. => while문에서는 end가 0 인경우에 값을 부분합에 포함하지 않으므로, 이전에 값을 더해주는 과정이 필요합니다. => while문을 통해 start 점이 end점을 앞서지 못하도록 하며, end점이 N(배열 원소의 개수)를 넘지 못하도록 합니다. (배열의 끝점 = (원소의 갯수 -1) ) => 부분합이 S를 넘지 못할 경우 end점을 뒤로 한 칸 미루며 다시 한번 계산합니다. => 부분합이 S인 경우, 최소값을 구하고 다시 한번 end점을 뒤로 미룹니다. ( 이후..
-
백준 1193 - 분수찾기백준 algorithm 2021. 1. 4. 22:41
=> 단순한 규칙성을 찾는 문제입니다. => 처음부터 끝까지 찾아갈 경우 시간제한에 걸리는 경우가 생길 수 있습니다. x가 몇번째 줄에 해당하는지 찾습니다. 해당 줄이 짝수인지 홀수인지 판별합니다. 각 줄의 성질에 따라 deno(분모), nume(분자)를 구하여 print 합니다. 각 줄에 있는 분수는 아래의 성질을 만족합니다. line + 1 = 분모 + 분자 위의 성질을 이용하여 for문을 통한 탐색이 아닌 사칙연산으로 원하는 분수를 구할 수 있습니다. #include #include using namespace std; void Print(int deno, int nume) { cout
-
백준 2523 - 별 찍기 - 13백준 algorithm 2020. 8. 24. 22:33
단순한 별 찍기 문제입니다. 입력받은 숫자만큼 별의 개수를 늘려 프린트를 한다 입력받은 숫자까지 별의 갯수를 프린트한 경우 숫자를 줄여가며 별을 프린트합니다. 간단한 문제이기 때문에 코드를 보시면 이해가 됩니다. #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin >> N; int cnt=1; while(cnt