본문 바로가기

투포인터2

백준 s1 2531 회전 초밥 c++ https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 문제 원형의 회전 초밥이 주어진다. k개의 접시를 연속으로 먹는다고 할 때, 손님이 먹을 수 있는 초밥 가짓수의 최댓값은? 이때 쿠폰으로 c번 초밥은 먹을 수 있다. 풀이 배열의 어떤 연속적인 상태를 고려할 때, 한 칸씩 +- 가능할 땐 투포인터 사용 가능 st, en : 시작점과 끝점 cnt : 해당 st ~ en에 몇 가지의 초밥을 먹을 수 있는지 ans.. 2024. 3. 2.
백준 s4 2003 수들의 합 2 c++ https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 문제 길이가 N인 수열이 주어질 때, A[i] ~ A[j]의 합이 M인 경우의 수 구하기 풀이 그냥 이중 for문으로 풀면 10^8이라 시간 초과가 날 수도 있음 .. 투 포인터로 O(N)으로 구할 수 있다 수도 코드 // en범위를 넘으면, sum에 더할 수 있는 건 다 더했는데도 M은 못 넘은 거 이므로 끝내는 게 맞음 while: st < N && e.. 2024. 3. 1.