본문 바로가기

백준 문제 풀이 & C++ 공부54

백준 14391 C++ https://www.acmicpc.net/problem/14391이 문제는 비트마스킹으로 하는데 생각을 처음에 잘못해서 좀 오래 걸렸다.예를 들어 아래 코드 상1100이렇게 생긴게 3을 의미하는데 코드를 만들어 놓고 손으로 그림 그리며 생각할 때0011이렇게 생각을 해서 하나하나 모두 출력해보다가 찾아냈다. 배열을 뒤집어서 가로를 확인한 것과 동일하게 t++로 할려고 했는데 배열을 뒤집은 대로 비트가 돌아가는 것이 아니기에 틀린 방법이었다. #include #include #include using namespace std;int n, m;int result = 0;int paper[5][5];int visited[5][5];vector v;vector adds;int main(){ ios_base::.. 2024. 5. 30.
백준 C++ 2234번 https://www.acmicpc.net/problem/2234 이 문제에서 비트가 켜져있으면 이동하면 안된다라는 점은 쉽게 알아낼 수 있었다.하지만 고민한 문제는 벽을 1개를 허문다는 점이었다.실제로 모든 칸에 대해서 한 비트씩 끄는 건 너무 비효율적이라고 생각했어서 다른 방법을 찾았어야했다.생각보다 방법은 쉽게 할 수 있었는데 visited로 구역을 나누는 것으로 했다. #include using namespace std;//성 방의 갯수 -> sectionNum - 1//가장 넓은 방의 넓이//하나의 벽을 제거하여 얻을 수 있는 가장 넓은 방의 크기int n, m; int sectionSize = 0;int sectionNum = 0;int maxSectionSize = 0;int maxLink.. 2024. 5. 13.
백준 14890 C++ https://www.acmicpc.net/problem/14890이 문제는 조건이 까다롭지 하나하나 따지며 생각하면서 if문으로 뚫으면 괜찮다.실수한게 재귀함수에 return을 넣지 않아서 계속 result가 다르게 나와서 cout을 곳곳에 넣었는데 오히려 이 글을 보시는 분들이 출력을 잘 볼 수 있는 좋은 상황이 된거 같다. #include #include using namespace std;int n, l;int arr[101][101];int temp[101][101];int landCount = 0;int result = 0;void go(int y, int x, int past){ if (x >= n) { //끝까지 옴. //cout 1 || sub 0) { //현재가 더 높다. if.. 2024. 4. 27.
백준 2910 C++ https://www.acmicpc.net/problem/2910 2910번: 빈도 정렬 첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다. www.acmicpc.net 여기서 고민한 점은 결국 빈도수와 숫자가 가장 먼저 나온 index를 저장하는 방식이었다. set을 쓸까 고민도 했지만 map으로 진행하였다. map을 사용하는 방법에 대해서 잘 몰랐는데 덕분에 한번 알아보게 되었고 아래 코드에서 bin[t] == 0으로 확인하듯이 map에 값이 없으면 0으로 되어 있단 점을 이용해 이미 한번이라도 들어왔는지 확인을 하였다. #include #include #include #include using nam.. 2024. 4. 23.