본문 바로가기

백준

(148)
요세푸스 www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 ..
2048(easy) - DFS/시뮬레이션 www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; //int arr[21][21]; int realMax = 0; int findMax(vector&arr) { int maxnum = 0; f..
4연산 문제 정수 s가 주어진다. 정수 s의 값을 t로 바꾸는 최소 연산 횟수를 구하는 프로그램을 작성하시오. 사용할 수 있는 연산은 아래와 같다. s = s + s; (출력: +) s = s - s; (출력: -) s = s * s; (출력: *) s = s / s; (출력: /) (s가 0이 아닐때만 사용 가능) 입력 첫째 줄에 s와 t가 주어진다. (1 ≤ s, t ≤ 109) 출력 첫째 줄에 정수 s를 t로 바꾸는 방법을 출력한다. s와 t가 같은 경우에는 0을, 바꿀 수 없는 경우에는 -1을 출력한다. 가능한 방법이 여러 가지라면, 사전 순으로 앞서는 것을 출력한다. 연산의 아스키 코드 순서는 '*', '+', '-', '/' 이다. #include #include #include #include #i..
아기 상어 www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net #include #include #include using namespace std; int n; int arr[21][21]; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; bool check[21][21]; typedef struct{ int x; int y; int sz; int t; int cnt; }info; int bfs(info &baby, int ..
움직이는 미로탈출 www.acmicpc.net/problem/16954 16954번: 움직이는 미로 탈출 욱제는 학교 숙제로 크기가 8×8인 체스판에서 탈출하는 게임을 만들었다. 체스판의 모든 칸은 빈 칸 또는 벽 중 하나이다. 욱제의 캐릭터는 가장 왼쪽 아랫 칸에 있고, 이 캐릭터는 가장 오른쪽 www.acmicpc.net #include #include #include #include #include #include #include #include #include using namespace std; int n = 8; int m = 8; int dx[] = { -1,1,0,0,1,1 ,-1,-1,0}; int dy[] = { 0,0,1,-1,-1,1,1,-1,0}; //comma 잘 좀 찍자...바보야 vectora..
벽부수고 이동하기3 www.acmicpc.net/problem/16933 16933번: 벽 부수고 이동하기 3 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net #include #include #include #include #include #include #include using namespace std; int n, m; int map[1001][1001]; bool check[1001][1001][11]; //check에다가 총움직인횟수를 더해주는 대신 true false 로 체크 int dx[] = { -1,1,0,0 }; ..
벽부수고 이동하기2 www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net #include #include #include #include #include #include //테스트 미통과 코드 using namespace std; int n, m,k; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,1,-1 }; int arr[1000][1000]; //or vector int check[1000][1000][10];//..
벽부수고이동하기4 - 플러드 필 www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net #include #include #include #include #include #include #include using namespace std; int n; int m; int check[1001][1001]; //전역변수로 1000*1000은 가능 int arr[1001][1001]; int dx[] = {1,-1,0,0}; int dy[] = { 0,0,1,-1 }; int bfs..