Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Social Distancing II
- CCPC
- vue.js
- 백준 Social Distancing II
- BOJ Social Distancing
- Spring Security
- 18881번
- 베리어블 폰트
- 백준 18877번
- java
- 18877번 Social Distancing
- async
- 텐서플로맛
- 반응형 웹
- 백준
- await
- JavaScript
- BOJ
- BOJ 18877
- VUE
- social distancing
- 18877번
- spring boot
- 일해라 개발자
- BOJ 18881
- 모바일 버전만들기
- CSS
- Catholic univ Computer Programming Contest
- 백준 BOJ
- BOJ Social Distancing II
Archives
- Today
- Total
나아가는 길에 발자국을 찍어보자
[백준/BOJ] 12100번 2048(Easy) 본문
반응형
이번주에는 구현문제를 열심히 풀었는데 그중 제일 나를 괴롭혔던 문제였다.
처음에 문제 이해가 잘 안되서 게임을 해봤는데 이지 문제라서 그런지 게임과는 달리
새로운 블록을 추가하지 않아 이해하고 나면 간단한 문제이다.
현재 상태에서 4방향으로 이동할수있고, 블록을 이동시켜서 최대 5번 이동해서(5번 이하로 이동해도 가능)
만들수있는 가장 큰 블록의 값을 구하면 된다.
https://www.acmicpc.net/problem/12100
문제는 완전 탐색으로 풀었다. 현재 상태에서 위,아래,오른쪽,왼쪽으로 이동할때 재귀를 돌렸다.
까다롭다고 생각했던건 블록의 이동을 구현하는것이었는데, 내가 생각했던건 이동을 한방향으로 가는걸로 만들고
이동시키는 배열을 돌려서 4방향으로 이동시키는 것과 같은 걸로 해 구현을 했다.
이동하는 부분을 함수로 따로 구현하고 싶었는데 2차원 배열을 반환하는 걸 찾아봐도 잘 모르겠어서 그냥 노가다를 했다.ㅜㅜ
이부분은 다음에 공부를 해봐할듯하다. 역시 포인터는 헷갈려...
<코드>
#include<iostream> #include<vector> #include<queue> #include<functional> #include<algorithm> #include<string.h> using namespace std; int N; int M = 0; void te(int adj[50][50], int n) { if (n > 5)return; bool ck = true; int rep[50][50] = { 0 }; int idx = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (M < adj[i][j])M = adj[i][j]; } } //왼 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (adj[i][j]) { if (idx>0 && rep[i][idx - 1] == adj[i][j]&&ck) { rep[i][idx - 1] += adj[i][j]; ck = false; } else { rep[i][idx] = adj[i][j]; idx++; ck = true; } } } idx = 0; } te(rep, n + 1); //아래 idx = 0; ck = true; memset(rep, 0, sizeof(rep)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (adj[N - 1 - j][i]) { if (idx>0 && rep[i][idx - 1] == adj[N - 1 - j][i]&&ck) { rep[i][idx - 1] += adj[N - 1 - j][i]; ck = false; } else { rep[i][idx] = adj[N - 1 - j][i]; idx++; ck = true; } } } idx = 0; } te(rep, n + 1); //오 idx = 0; ck = true; memset(rep, 0, sizeof(rep)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (adj[i][N - 1 - j]) { if (idx>0 && rep[i][idx - 1] == adj[i][N - 1 - j]&&ck) { rep[i][idx - 1] += adj[i][N - 1 - j]; ck = false; } else { rep[i][idx] = adj[i][N - 1 - j]; idx++; ck = true; } } } idx = 0; } te(rep, n + 1); //위 idx = 0; ck = true; memset(rep, 0, sizeof(rep)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (adj[j][N - 1 - i]) { if (idx>0 && rep[i][idx - 1] == adj[j][N - 1 - i]&&ck) { rep[i][idx - 1] += adj[j][N - 1 - i]; ck = false; } else { rep[i][idx] = adj[j][N - 1 - i]; idx++; ck = true; } } } idx = 0; } te(rep, n + 1); return; } int main(void) { scanf("%d", &N); int adj[50][50]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cin >> adj[i][j]; } } te(adj, 0); printf("%d", M); return 0; }
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[백준/BOJ] 2499번 의좋은 형제 (0) | 2020.03.27 |
---|---|
[백준/BOJ] 17370번 육각형 우리 속의 개미 (0) | 2020.02.14 |
[백준/BOJ]14500번 테트로미노 (0) | 2020.01.11 |
[백준/BOJ]15685번 드래곤 커브 (0) | 2020.01.11 |
[백준/BOJ] 1242번 소풍 (0) | 2019.12.31 |
Comments