알고리즘/백준(3)
-
[백준] 골드4 15685번 - 드래곤커브 (C++)
문제 이해 드래곤 커브의 좌표와 방향, 세대가 주어진다. 모든 드래곤 커브의 흔적을 2차원 배열 위에 1로 표시한다. 사각형 모양의 1을 찾아 세면 문제 해결. 접근 1. 드래곤커브가 세대가 바뀔 때 기존 커브를 회전시키면서 좌표를 찍는다. 2. 0,0 ~ 99, 99 까지 arr[i][j] + arr[i + 1][j] + arr[i][j + 1] + arr[i + 1][j + 1] 이 4 인 곳을 모두 센다. 풀이 1. 드래곤 커브의 구현 x,y 좌표를 담을 빈 벡터를 선언하고 "초기 좌표" 와 "초기 좌표로부터 주어진 방향으로 이동한 좌표" 를 넣는다. 좌표 기준 90도 회전 알고리즘은 다음과 같다. 기준 좌표 sa, sb 와 회전할 좌표 ca,cb, 회전한 좌표 na, nb가 있다. 먼저 원점으로 ..
2023.05.04 -
[백준] 골드4 2636번 - 치즈 (C++)
접근법 1. 덩어리의 테두리를 검출하는 방법을 생각하자. (컴퓨터 비전 수업에서 비슷한 기법을 배웠다.) 2. 다 녹기 하루 전의 치즈 량을 요구한다. 매일 치즈량을 기록해야한다. 3. 치즈가 언제 다 녹을지 모르니 무한 루프로 접근한다. 풀이 1. 먼저 N x M의 2차원 벡터를 준비하여 입력 받는다. 2. 무한 루프를 선언하고 BFS 함수를 돌린다. 3. 함수 내의 BFS 는 0,0에서 시작하며 0에 대한 좌표는 큐에, 1에 대한 좌표는 따로 선언해둔 벡터 배열에 저장한다. 4. BFS의 while문이 끝나고 1의 좌표들을 저장한 벡터 배열을 순회하며 해당 좌표를 0으로 바꾼다. 5. 테두리의 크기를 입력받는 배열을 준비하여 1의 좌표를 담은 벡터 배열의 크기를 담는다. 6. 만약 벡터 배열의 크기가..
2023.05.03 -
[백준] 골드5 5430번 - AC 문제풀이 (C++)
유의사항 : 배열을 일일이 뒤집으려하면 안된다. 또한, 배열을 삭제하는 연산을 수행하면 안된다.(시간 초과) 접근법 : 1. 배열을 뒤집는 것은 배열을 읽는 방향을 가리키는 변수를 선언하여 뒤집을 때마다 읽는 방향을 바꿔주는 방식으로 구현한다. 2. 배열의 삭제는 입력받은 숫자 배열의 앞과 뒤의 가리키는 인덱스 변수를 각각 두어 이를 증감시키는 방식으로 구현한다. #include #include #include #include #include #include #include #include using namespace std; int T; void func(string command, string arr, int cnt){ int idx = 1; vector numvec; // 문자열을 숫자로 변환하여 ..
2023.05.02