전체 글

항공대 알고리즘 동아리 Koala 🥰
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 ..
www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000..
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net N보다 작은 소수를 시간제한 내에 빠르게 구하는 방법이 중요했던 투포인터 문제입니다. [N 보다 작은 소수를 구하는 방법] 1부터 N사이의 수 각각이 자기 자신과 1 외의 다른 수와 나눠 떨어지지 않아야 소수의 정의를 만족합니다. 모든 수에 대해서 직접 확인을 하는 방식은 (N ≤ 4,000,000) 이라는 조건을 고려하면 적절한 방식이 아닙니다.(시간초과) 따라서 해당 문제에서 에라토스테네스의 체를 이용해서 소수를 구했습니다. for (int i = 2; i
www.acmicpc.net/problem/1806 투포인터를 이용해서 시간제한 안에 알고리즘을 작동시키는 것이 포인트입니다. 주어진 입력 N은 100,000 보다 작은 수 입니다. 모든 수열을 확인하는 방식은 O(N^2) 의 시간복잡도를 가지게 되는데 이는 문제의 시간제한 0.5초 안에 작동이 불가능합니다. 따라서 투포인터를 이용해서 시간 복잡도를 O(N)으로 구현했습니다. 우선 주어지는 N과 S 값, N개의 배열 원소를 입력 받습니다. int n, s; cin >> n >> s; for (int i = 0; i > arr[i]; } 이제 투포인터를 사용한 부분을 보겠습니다. int left = 0; int right = 0; int sum = arr[left]; int ..
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제를 해결하기 위해 할 일 첫 번째. 소수 구하기 소수를 구하기 위해 에라토스테네스의 체 사용 자신의 배수를 미리 제거하여 연산의 횟수를 줄인다. memset(arr, true, sizeof(arr)); arr[1] = false; for (int i = 1; i 소수의 합에서 소수 배열의 start 번째 값을 뺀다. ii) 소수의 합 소수의 합에서 소수 배열의 end 번째 값을 더한다. 이때, 소수의 합과 N이 같으면 경우의 수를 하나 찾은 것으로 간주한다. int sum = 0; int start = 0; in..
youtu.be/GWX0aV8DhNU
www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net 이 문제는 DP, 다이나믹 프로그래밍을 설명할 때 A반에서 출제했던 문제입니다. 이 문제를 처음 보면 어렵게 느껴질 수 있지만 그림을 그려서 따라가다 보면 쉽게 해결 할 수 있는 문제입니다. 풀이 1. 왼쪽 전봇대를 기준으로 오름차순으로 정렬을 시킵니다. 2. 오른쪽 전봇대에서 "가장 긴 증가하는 부분 수열"을 구해줍니다. 3. 2번 과정에서 구한 "가장 긴 증가하는 부분 수열"의 크기를 N에서 빼주면 답이 됩니다. ..
youtu.be/L5Aoq447YWM
www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 2020 하반기 삼성 SW 역량테스트 문제 중 하나였어요. 생각보다 쉬웠다는 후기가 많아서 겁도 없이 미팅 때 라이브로 풀다가.. 디버깅을 거의 30분 넘게 했는데도 잘못된 점을 찾지 못했어요ㅠㅠ.. 그래서 너무 이상해서 질문 검색 게시판에 들어가보니 이란 글이 보이더라구요.. 궁금하시면 한번 확인해보세요! 저는 저 글을 보고 책상을 뿌실뻔 했어요! 제가 미팅 때 문제를 리뷰하면서 설명했던..
풀이 더보기 큐를 활용한 간단한 문제이다. 3분 30초는 210초이고 210초에서 흐르는 시간을 까든, 0초부터 시작해서 210초를 초과하는 조건을 걸든 210초 시간 제한을 둔다. 1. 8명을 que에 넣고 시작하는 사람의 번호가 첫번째 que.front()에 오게 둔다. 2. if(사람이 T를 받으면) { 시간을 깎고 다음 사람한테 폭탄을 준다. } else{ N이나 P를 받았으면, 시간만 까고 그 사람에게 폭탄을 유지한다. } 3. 위 조건에서 210초가 지나면 그 당시에 폭탄을 들고 있었던 사람을 출력한다. (풀이는 내가 짠 코드와 리더님이 짜주신 코드 두 개 동봉합니다.) 소스코드1 더보기 int main(){ int n, t, z; int time_ticking = 0; cin>> n; whi..
KauKoala
Koala