본문 바로가기

Programming/Algorithm 193

백준 주사위 던지기 /*크기가 엔엠인 지도가 있습니다. 주사위의 전개도는 아래와 같습니다.지도의 좌표는 알씨로 나타내며 으로부터 떨어진 칸의 개수 이므로인데스 0부터 시작해도 상관없습니다.주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태입니다. 1. 가장 처음에 주사위에는 모든 면이 0이 적혀져 있습니다. 주사위를 굴립니다.1. 이동한 칸에 써 있는 수가 0 이면, 주사위의 바닥면에 써 있는 수가 칸에 복사0이 아닌 경우, 칸 - > 주사위, 칸에 써 있는 수가 0 이 됩니다. 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 떄, 상단에 써 있는 값을 구하는 프로그램바깥으로 이동시키려는 경우 -> 해당 명령을 무시, contiune 를 넣으면 됩니다. 동 서 북 남의 순서로 돌아가게 됩니다.남남남 동 북북.. 2018. 2. 21.
백준 테트로미노 /*여러 개 이어 붙인 도형있습니다. 정사각형은 겹치면 안됩니다. 도형은 모두 연결되어야 합니다.꼭지점 끼리 연결되어야 합니다. 엔엠 하나를 적절히 놓아서 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하세요.회전이나 대칭 가능합니다. 예를 들어 먼저 작대기 하나를 가지고 검사를 시행합니다. 그럼, 가로로 두었을떄,4개라는 공통점이 있습니다. 그러므로 재귀로 한번 풀어보면 어떻게 풀리나요. 뎁스 4가 되면 계산되도록 실행하면 됩니다. 그런데 움직이는 위치는? 동서남북 상관없이 4가 되면 되고, 움지이는 수는 상관없이 섬만 기억하고 있으면 됩니다.그리고 행렬 밖으로 넘어가는지 검사하면 됩니다. dfs 로 풀이가 가능합니다. 4개의 위치를 저장하고 있는 벡터가 있어야 하나요? 그렇게 처음 시작.. 2018. 2. 21.
백준 연구소 문제 다시 풀어보기 #include #include #include using namespace std;#define SIZE 8int map[SIZE][SIZE];int map_store[SIZE][SIZE];int check[SIZE][SIZE];struct points {int x, y;};queue que;int dx[] = { 0,0,1,-1 };int dy[] = { 1,-1,0,0 };int x, y, nx, ny, n, m;int wall;int maxVal;int safe_cnt; void copy_map(int(*a)[SIZE], int(*b)[SIZE]) {for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {b[i][j] = a[i][j];}}} voi.. 2018. 2. 20.
백준 뱀 기출 민을 사용하기에 알고리즘 헤더파일이 들어가고, 벡터는 처음 방향이 변경되는 저보가 들어갑니다. 그리고 라인이라는 구조체에는 좌표 2개가 들어갑니다. 그리고 방향정보 총 5개의 변수가 들어갑니다. 그리고 이 변수들에 대해서 dir 의 경우에는 가로일때 0 표시, 세로 일때 1 표시를 하게 딥니다. 그리고 좌표들을 정렬해주는데, x2 가 큰 것으로도 설정합니다. 그러므로 일반적으로 생각하는 왼쪽에 엑스 큰값, 위쪽이 큰값입니다. 와이는. 이것을 주의하도록 합니다. 그리고 이에 대해서 벡터에 4개의 선분을 그어주도록 합니다. 그리고 dx dy 의 값에 주의를 하도록 합니다. 엑스는 오른쪽으로 갈때 커지는 것이고, 와이는 위로 갈때 커지는 값입니다. 0 1 2 3 의 순서는 북 서 남 동 순서 입니다. 다음으로.. 2018. 2. 20.
백준 연산자 끼워넣기 /*연산자 끼워넣기. dfs 에서 필요한 파라미터가 무엇인지 명확히 해야 합니다.퇴사 문제도 이것과 동일합니다. 어떤 파라미터를 가지고 갈 것인지 명확히 해야합니다.여기서는 min, max 값 두개로 양분할 필요는 없고, sum 으로 가져가고, 나머지 연산의 밸류들을가지고 가면 됩니다. 그리고 숫자 인덱스를 가지고 가야합니다.*/ #include #include using namespace std;#define SIZE 100 int N;int numArr[SIZE];int operArr[4];int maxVal=-1000000000, minVal=1000000000;int sum; void problemIn() {cin >> N;for (int i = 0; i > numArr[.. 2018. 2. 18.
백준 째로탈출2 /*단, 파란 구슬이 구멍으로 같이 나오면 실패입니다.최대 10번까지 보드를 조작할 수 있으므로 BFS 탐색을 이용하면 각 상태 공간에서상하좌우 4방향으로 전이 가능하고, 한 상태 공간에서 해당 방향으로 최대 max 만큼이동할 수 있으니, 4의 10승 곱 맥스 엔엠임을 알 수 있습니다.따라서 각 상태 공간 내에서 한 방향으로 이동할때 1. 빨간 구슬과 팔나 구슬이 일직선 상에 없음 1.1 빨구 가는 길에 구멍이 있는 경우 탈출 성공 1.2 파구 가는 길에 구멍이 있는 경우 탈출 실패 1.3 구멍이 없는 경우 구슬들을 최대한 이동한 후에 큐에 푸시2. 빨간 구슬 가는 길에 파란 구슬이 있는 경우 2.1 파란 구슬 앞에 구멍이 있는 경우 탈출 성공 2.2 파란 구슬 뒤에 구멍이 있는 경우 탈출 실패3. 파란.. 2018. 2. 13.
백준 뱀3190 /*사과를 먹으면 뱀 길이가 늘어납니다. 뱀이 기어다니다 벽 또는 몸과부딪히면 게임이 끝납니다. 엔엔 정사각 보드위에서 진행됩니다.몇몇 칸에 사과, 보드의 상화좌우 끝에 벽이 있습니다. 뱀은 맨위 맨 좌측뱀의 길이는 1 입니다. 오르쪽을 향합니다. 몸길이를 늘려 머리를 다음칸에 위치.이프 이동한칸 사과 있으면, 그 칸에 있던 사과없어지고 꼬리는 그대로엘스 사과가 없으면, 몰길이르 줄여 꼬리를 위치한 칸을 비워줍니다. 그 결과 사과의 위치와 뱀의 이동경로가 주어질 때 게임이 몇 초 후에 끝나는지 계산뱀의 길이나, 위치를 어떻게 저장해야하는지.*/ #include #include #include #define SIZE 10using namespace std;int N, K, L, X, C, a_x, a_y,.. 2018. 2. 13.
백준 뱀 /*가로 길이 세로길이 2엘+1 2차원 홀수 격자,엑스 와이. 가운데 0,0 엑스 와이 방향에대해서 오른쪽, 아래.뱀의 크기가 격자판의 한 칸의 크기. 뱀의 머리는 격자판의 오른쪽을 보고 있음, 바라보고 있는 방향으로 1초에 한 칸씩 몸을 늘려나감뱀의 머리는 그 방향의 칸으로 옮겨갑니다. 예를 들어보면, L=3 인 경우를 생각해보면뱀은 처음에 0,0에 있으며, 격자판 한 칸 만큼, 뱀의 머리가 바라보는 방향 오른쪽1초가 지나면 두 칸을 차지하게 되며, 애 때 1,0 칸에 뱀의 머리 1초가 더 지나면세 칸을 차지하게 되고, 뱀의 머리는 2,0 에 놓이게 됩니다. 머리가 향하고 있느 방향을 일정한 규칙에 따라 시계방향, 반시계방향으로 회전1번째 회전은 뱀이 출발한지 t1초 후에 일어나며, 아이번째 회전은 뱀.. 2018. 2. 12.
백준 퇴사 #include #include using namespace std; #define SIZE 16 int T[SIZE];int P[SIZE];int n;int maxVal; void problemIn() {cin >> n;for (int i = 1; i > T[i] >> P[i];}/*입력을 받은 다음에, 만약에 7일까지 일이 가능하다고 하면, 티를 더하고, 가격을 더하고, 어떤 조건을 만족하면, 맥스를 취합니다.그리고 그 아래에는 인덱스만 하나 올라가고, 섬은 그대로 입니다. 오께이요. 인덱스 하나만 앞으로 올라가도록 합니다. 내가 만든 알고리즘과 비교하면 완전 차이가 많이 나네요. 뎁스는 하나 전진하고, 섬은 그대로 유지하는 것이 키워드 입니다.그 아래와 처음 리턴하는 조건문에 대해서는 풀 수 있습니.. 2018. 2. 12.
백준 연구소 /*바이러스 연구소 크기 엔엠, 벽의 개수는 3개, 꼭 3개를 세움니다.0은 빈칸 1은 벽 2는 바이러스, 안전영역의 크기는 27안전 영역의 크기를 최대로 구하는 것 벽은 빈칸에다가 만들 수 있습니다.벽 1을 3개 놓고 dfs 재귀로 돌립니다.바이러스 2에 대해서 완전탐색 bfs 를 돌립니다.체크 벽 하나를 맏듭니다. 안전 영역의 크기를 최대값을 저장하는 함수를 만들도록 합니다.맵을 복사해야할 것 같습니다. 맵을 복사 맵을 복사하는 방법이 있습니다. 맵에 대해서 어떻게 재귀를 만들 수 있을까?*/ #include #include #include using namespace std;#define SIZE 8int map[SIZE][SIZE];int map_store[SIZE][SIZE];int check[.. 2018. 2. 8.