C++

· [백준]/C++
1018번: 체스판 다시 칠하기 (acmicpc.net) 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net #문제 간단 정리 문제 상황: 지민이는 MxN 크기의 보드를 발견했습니다. 이 보드는 검은색(B)과 흰색(W)의 정사각형으로 구성되어 있습니다. 지민이는 이 보드에서 8x8 크기의 체스판 부분을 잘라내고 싶습니다. 조건: 체스판의 규칙에 따라 각 칸은 검은색과 흰색으로 번갈아가면서 칠해져야 합니다. 체스판의 맨 왼쪽 위 칸의 색깔에 따라 두 가지 색칠 방식이 있습니다. 목표: 8x8 크기로 잘라낸 ..
· [백준]/C++
https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net #문제 간단 정리 핵심: 최단거리 문제는 BFS 를 사용하자 DFS를 사용하면 시간 초과가 난다 쉽게 생각해보면 하나의 길을 끝까지 갔다가 다시 되돌아 와서 다시 가니까 BFS보다 시간이 훨씬 더 걸릴 거라는 것을 알아낼 수 있다. #문제 해결 방법 전역 변수 선언: maze[100][100]: 미로 정보 저장 (1은 이동 가능, 0은 이동 불가능). check[100][100]: 해당 위치를 방문했는지 여부를 저장. dist[..
· [백준]/C++
전체 코드 #include #include #include using namespace std; typedef long long ll; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int arr[10001] = { 0, }; int n; cin >> n; for (int i = 1; i > input; arr[input]++; } for (int i = 1; i
· [백준]/C++
https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 간단 정리 원으로 앉아있고 K번째마다 제거되기 때문에 K 번째가 아닐때는 제외하고 큐를 사용하여 뒤를 넘겨주면 구현이 가능할테지만... 큐를 사용하지 않고 풀었다, 큐를 사용해서 푼 블로그 참조 https://cocoon1787.tistory.com/234 하지만 나는 그냥 큐 사용을 안하고 구현될 것 같아서 다르게 풀었다. 문제 해결 방법 대략 내가 직접 하나하나 세가면서 한다 생각하고 구현하였다. 수를 제거함을 알기위해서 count 변수, 지금 가리키고 있는 수인 포인터 ..
· [백준]/C++
문제 간단 정리 정렬문제 아마도 내장함수를 사용하지 않는다면 n logN의 시간복잡도를 갖는 정렬로 풀어야한다. 문제 해결 방법 sort 내장함수 사용 >> n; for (int i = 0; i > input; vec.push_back(input); } sort(vec.begin(), vec.end()); for (int a : vec) { cout
· [백준]/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 문제 간단 정리 문제 해결 방법 https://dfdfg42.tistory.com/entry/%EB%B0%B1%EC%A4%80-14246%EB%B2%88-K%EB%B3%B4%EB%8B%A4-%ED%81%B0-%EA%B5%AC%EA%B0%84-C 참고 전체 코드 #include #include using namespace std; typedef long lo..
· [백준]/C++
https://www.acmicpc.net/problem/14246 14246번: K보다 큰 구간 $n$개의 자연수로 이루어진 수열이 주어질 때, 특정 구간 $[i,j]$ ($i≤j)$의 합이 $k$보다 큰 모든 쌍 $(i, j)$의 개수를 출력하시오. www.acmicpc.net 문제 간단 정리 구간합으로도 될 것 같다. 하지만 투 포인터로 풀어보자 만약 12345 이고 K가 5일때 현재 123을 합한상태라면 4 5 는 더할 필요 없이 +3만 해주면 된다. 이를 유의해서 풀 문제 해결 방법 투 포인터를 이용해서 풀어보자.. 인덱스를 조심해야된다 전체 코드 #include #include using namespace std; typedef long long ll; int main() { ll N, M; ..
· [백준]/C++
문제 간단 정리 '' 생략 문제 해결 방법 이 문제는 섬과 섬 사이의 연결 관계를 파악해야 하는 그래프 관련 문제입니다. 이를 효율적으로 파악하기 위해 Union-Find 알고리즘을 사용합니다. Union-Find는 그래프의 연결 요소를 식별하고 관리하기 위한 알고리즘입니다. Union-Find 알고리즘에서 'union' 연산은 두 집합을 하나로 합치고, 'find' 연산은 특정 원소가 어떤 집합에 속하는지를 찾는 데 사용됩니다. 본 문제에서는 다리 하나가 무너져 서로 왕복할 수 없는 섬들이 생겼습니다. 이때 두 섬을 다시 다리로 이어서 모든 섬이 왕복 가능하도록 해야 합니다. 이를 위해 먼저 주어진 섬 간 연결 정보를 이용해 각 섬의 부모 노드 정보를 업데이트합니다. 이렇게 하면 어떤 섬이 어떤 섬과 ..
· [백준]/C++
문제 간단 정리 구현문제이다 각 블럭들을 돌아가면서 조사하면 되는 간단한 구현문제지만 어떻게 구현하냐에 따라서 시간이 달라질것이다. 나는 그냥 모든 블럭들을 조회하는 무식한 방법으로 풀었다. 이렇게 풀면 오류도 많고 틀릴 가능성이 높으니 아마 각 블럭 모양을 만들고 회전시키는 방법이 가장 바람직하지 않을까 싶다 https://stack07142.tistory.com/299 예시 문제 해결 방법 #include #include #include using namespace std; int main() { int arr[100][100]; int count = 1; while (1) { int N; cin >> N; if (!N) break; //i 세로 j 가로 int temp = 0; int max = -..
· [백준]/C++
https://www.acmicpc.net/problem/11687 11687번: 팩토리얼 0의 개수첫째 줄에 M (1 ≤ M ≤ 100,000,000)이 주어진다.www.acmicpc.net #문제 간단 정리이하생략 #문제 해결 방법끝의 0의 개수는 2*5의 개수로 정해지고,2는 2의배수만큼 5는 5의 배수만큼 존재하기 때문에 2가 항상 5보다 많다때문에 5의 개수만 세주면 0의 개수와 같다 이분탐색의 범위는 m*5! 이 무조건 m개의 5의개수보다 많은 5를 가지므로right를 m*5로 설정해주면 된다. 또한 포함된 5의 개수는 5부터 5의제곱수들을 차례대로 나눈 몫을 구하면 5의 개수를 구하는함수를 만들 수 있다. #전체 코드#include #include #include #include #inclu..