목록두 포인터 (11)
어흥
문제 링크: www.acmicpc.net/problem/15831 15831번: 준표의 조약돌 첫 줄에 조약돌의 총 개수 N, 준표가 원하는 검은 조약돌의 최대개수 B와 하얀 조약돌의 최소개수 W가 주어진다. 둘째 줄에는 N개의 조약돌의 정보가 한 줄로 주어진다. i번째 문자가 B라면 i번 조 www.acmicpc.net 1. 주의할 점 - 두 포인터를 사용한다 2. 구현 - 0번째 돌 추가 이후 While문을 수행한다 - L=R=Result=0으로 초기화하고 시작한다 - 조건에 맞게 산책이 가능할때, Result값과 비교하여 갱신한다 - 검정색 조약돌의 수가 기준치보다 적거나 같을 때, R을 오른쪽으로 한칸 더 움직인다 → incR() 함수 수행. 이때, False를 반환할 경우 While문을 종료한다..
문제 링크: programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 1. 주의할 점 - 두 포인터를 이용하여 해결한다 - 포인터를 옮길때마다 왼쪽~오른쪽 포인터까지 탐색하지 않도록 한다 2. 구현 - Map을 이용하여 보석과 숫자를 매칭시킨다 - V 벡터를 이용하여 숫자에 해당하는 보석이 몇개 존재하는지 나타낸다 - 0번째 인덱스에 존재하는 보석을 미리 처리하고 시작한다 - While문을 통해 R 포인터가 Gems의 길이보다 작을때까지 수행한다. 내부 While문은 보석 전체가 ..
문제 링크: www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net 1. 주의할 점 - 두 포인터를 이용하여 문제를 해결한다 2. 구현 - Alpha[] 배열을 생성하여 각 문자가 L과 R포인터 사이에 몇개 존재하는지 알려준다 - Cnt를 통해 L과 R포인터 사이에 존재하는 서로 다른 문자의 수를 표현한다 - R을 전체 문자열의 길이보다 작고, Cnt가 Num이하일때 While문을 수행하여 현재 R이 가리키는 값을 Alpha[] 배열에 표시하고, 새로운 문자라면 Cnt++한..
문제 링크: www.acmicpc.net/problem/14746 14746번: Closest Pair Your program is to read from standard input. The input consists of four lines. The first line contains two integers, n (1 ≤ n ≤ 500,000) and m (1 ≤ m ≤ 500,000), where n is the number of points in set P and m is the number of points in set Q. In th www.acmicpc.net 1. 주의할 점 - 두 포인터를 사용하여 해결한다 2. 구현 - 각 원소를 P,Q 벡터에 담는다 - P,Q 벡터를 오름차순으로 정렬한다..
문제 링크: www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 1. 주의할 점 - 두 포인터를 이용하여 문제를 해결한다 2. 구현 - 초밥에 대한 정보를 Arr[] 배열에 받는다 - rawFish[] 배열을 통해 특정 종류의 초밥의 수를 나타낸다 - Arr[]배열에서 0~K-1번에 해당하는 초밥을 rawFish[]에 더하며 rawFish[]의 값이 1이 되면 현재 초밥 종류의 수를 나타내는 Cnt에 1을 더한다 - 쿠폰으..
문제 링크: 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 1. 주의할 점 - 두 포인터 or DP를 이용하여 해결한다 2. 구현 - 모든 수가 3만 이하의 자연수다 → i~j까지의 합이 Target번호라면, j이후의 Arr[] 배열의 원소를 더할 필요가 없다(더하면 초과하므로) 2-1) 두 포인터 - L,R를 모두 인덱스 번호 0부터 시작한다. Sum을 통해 L과 R 사이에 존재하는 모든 원소의 합을 저장한다 - ..
문제 링크: www.acmicpc.net/problem/13144 13144번: List of Unique Numbers 길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라. www.acmicpc.net 1. 주의할 점 - 두 포인터로 접근한다 - 아래 TC와 같은 케이스에 대해 정확히 처리한다 더보기 TC #1 5 3 4 1 2 4 2. 구현 - 입력받는 수들을 Arr[] 배열에 저장한다 - 두 포인터 L,R을 이용하여 L~R까지에 대한 처리를 진행한다 - R이 Num과 같을 때까지 진행한다 - Arr[]값이 나타난 수를 Check[] 배열에 저장하며, 만약 Check[]의 값이 True면 중복된 경우가..
문제 링크: www.acmicpc.net/problem/3649 3649번: 로봇 프로젝트 각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에 www.acmicpc.net 1. 주의할 점 - TC가 여러개 + 언제 끝나는지 알려주지 않음 -> EOF가 입력될 때까지 받는다 - 서로 다른 2 조각 사용 - TC마다 V 벡터 초기화 2. 구현 - if(cin>>len)을 통해 EOF를 입력 받았다면 false를, 아니라면 true를 입력 받기 때문에 EOF를 입력 받는다면 Break로 While문을 빠져 나간다 - 입력 받는 조각들을 오름차순으로..