목록알고리즘/백준 (341)
어흥
문제 링크: 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문을 종료한다..
문제 링크: 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/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 1. 주의할 점 - BFS 수행 도중, 0이 남아있지 않다면 BFS를 종료해도 된다 - 0이 없거나 극단적인 경우(Edge case)도 고려한다 더보기 TC #1 4 1 2 2 2 0 2 2 2 2 2 2 2 2 0 2 2 2 AC: 3 2. 구현 - 연구소에 대한 정보를 Arr[][]에 담고, 0의 개수를 Zero에 저장한다 - 바이러스의 좌표를 Virus 벡터에 담는다 - V 벡터를 통해 next_per..
문제 링크: www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 1. 주의할 점 - 상어가 격자판의 끝에 도달할 경우, 방향을 바꿔서 전진하는 과정 구현 - 상어에 대한 정보의 표현 방법(배열 or 벡터 등등) 2. 구현 - 상어에 대한 정보를 입력받을 때 방향의 경우, 따로 설정한 방향으로 변환한다(0~3: 상우하좌 순서). 방향값 변환 이후, Shark 벡터에 상어에 대한 정보를 저장한다 - Player 변수를 통해 현재 낚시왕의 위치를 ..
문제 링크: www.acmicpc.net/problem/16920 16920번: 확장 게임 구사과와 친구들이 확장 게임을 하려고 한다. 이 게임은 크기가 N×M인 격자판 위에서 진행되며, 각 칸은 비어있거나 막혀있다. 각 플레이어는 하나 이상의 성을 가지고 있고, 이 성도 격자판 위 www.acmicpc.net 1. 주의할 점 - BFS()를 통해 퍼트린다 - 최대한 간단하게 구현한다 2. 구현 - 한번에 퍼질 수 있는 정도를 Len[] 배열에 담는다 - 10개짜리 Queue를 생성하여 각 숫자에 해당하는 경우에만 포함하도록 한다 - 입력받을 때, 해당 지역이 성이면 개수를 센다 - BFS() 함수를 통해 1부터 P번까지의 Queue를 순서대로 퍼트린다 - Arr[][] 배열만을 사용하며, 다음 칸으로 ..
문제 링크: www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 1. 주의할 점 - 모든 조건에 맞게 구현한다 - 초기화 작업을 잘 수행한다 - 얼음이 1 줄어드는 경우를 잘 생각한다 2. 구현 - 얼음판에 대한 정보를 Arr[][] 배열에 담는다 - 입력받는 변의 크기를 2^num으로 변환한다 - 입력받는 Len의 크기도 변환 후, Rotate() 함수를 통해 회전한다 - 회전이 끝나면 Shrink() 함수를 통해 얼음이 줄어드는 얼음판이 ..