01-29 07:13
벤치마킹
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 가족소고기외식
- 커피
- 영통역소고기
- 홍시스무디
- 고마워다음
- 커피쏟음
- 파이썬
- 영통칠프로칠백식당
- 당근마켓중고차
- 편도수술
- 사진문자추출하기
- 양양솔비치 뷔페
- 아이혼자다녀옴
- 중학교입학수학문제
- 주차넉넉
- 사진에서 글자추출
- 푸르지오포레피스
- 영통외식
- 종이캐리어
- 양양솔비치아침
- 양양솔비치조식
- 결항전문
- 검색완료
- 에어아시아
- DFS
- 결항
- 사진문자추출
- 양양솔비치세프스키친
- 싱가폴중학교수학문제
- 오트눈썰매장
Archives
- Today
- Total
너와나의 관심사
2048 쉬운 버전의 문제 본문
2048 문제를 풀일이 있어서 좀 수정된 (쉬운 버전의 문제를 풀어 보았다..)
단순한 자료 구조 (배열정리) 문제에 대한 해답을 정확히 찾지 못해 .. 고생하였다.
아래와 같은 문제인데.. up/down/right/left 의 순의로 같은 값을 더해 나가는것인데
방향에 따라 같은 값이 배열 옆으로 있으면 두배 해주고 0으로 만들어 주고 2칸 뛰어 넘고
만약 다음 자리에 0이면 j 값을 index 사용해서 값을 이동하고 다시 0으로 만들어준다
#include#include using namespace std; #define MAX 10001 int N; bool visit[21][21]; int board[21][21]; int queue[21]; char dir[10]; int d; /* typedef enum { RIGHT = 0, LEFT, UP, DOWN }Dir; */ enum { RIGHT = 0, LEFT, UP, DOWN }; int c_d(char a){ int ret; switch (a){ case 'r': ret = RIGHT; break; case 'l': ret = LEFT; break; case 'u': ret = UP; break; case 'd': ret = DOWN; break; default: break; } return ret; } void zero_padding(int start){ for (int i = start; i < N; i++) queue[i] = 0; } void queueing(void){ int i, j; j = 0; for (i = 0; i < N; i++) { if (queue[i] == 0) continue; else queue[j++] = queue[i]; } //j 부터 모두 zero setting zero_padding(j); j = 0; for (i = 0; i < N; i++){ if (queue[i] == 0) continue; if (queue[i] == queue[i + 1]) { queue[j] = queue[i] * 2; queue[i+1] = 0; i++, j++; } else { queue[j] = queue[i]; if (i != j) queue[i] = 0; j++; } } zero_padding(j); } void print_result() { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) cout << board[i][j] << " "; cout << endl; } } void solve(void){ int i, j, k; int d_ret = c_d(dir[0]); if (d_ret == LEFT){ for (i = 0; i < N; i++){ k = 0; for (j = 0; j < N; j++) queue[k++] = board[i][j]; queueing(); k = 0; for (j = 0; j < N; j++) board[i][j] = queue[k++]; } } else if (d_ret == RIGHT){ for (i = 0; i < N; i++){ k = 0; for (j = N - 1; j >= 0; j--) queue[k++] = board[i][j]; queueing(); k = 0; for (j = N - 1; j >= 0; j--) board[i][j] = queue[k++]; } } else if (d_ret == UP){ for (i = 0; i < N; i++){ k = 0; for (j = 0; j < N; j++) queue[k++] = board[j][i]; queueing(); k = 0; for (j = 0; j < N; j++) board[j][i] = queue[k++]; } } else if (d_ret == DOWN){ for (i = 0; i < N; i++){ k = 0; for (j = N - 1; j >= 0; j--) queue[k++] = board[j][i]; queueing(); k = 0; for (j = N - 1; j >= 0; j--) board[j][i] = queue[k++]; } } } int main(void) { int test_case; int T; int i, j; freopen("input.txt", "r", stdin); setbuf(stdout, NULL); T = 1; scanf("%d", &T); for (test_case = 1; test_case <= T; ++test_case) { scanf("%d %s", &N, dir); for (i = 0; i < N; i++) for (j = 0; j < N; j++) scanf("%d", &board[i][j]); printf("#%d\n", test_case); solve(); print_result(); } return 0; }
Comments