> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/undefined-1/2_-1.md).

# 2048(Easy)

몇몇 솔루션을 봤을 때 공통적인 idea는 다음과 같다.

1. 새로운 2차원 배열(tmp)을 생성
2. 각 칸의 값 이동
3. 다음으로 옮길 칸 값과 2의 값이 같은지 비교 : if(map\[i]\[j] == tmp\[target]\[y] && flag==1)\
   또한, 이미 합쳐진 칸은 다시 합치지 않기 때문에 flag변수로 구분한다.\
   합쳐진 적 없는 칸은 flag 값이 1이다.
4. 같으면 합쳐준다. : tmp\[target]\[y] \*= 2; flag=0;\
   합쳐줄 때 flag = 0으로 마킹한다.

내 문제 풀이 방식

1. 상,하 이동방향일 때 : 열 반복문 { 행 반복문{ ...}} ✅(정답과 동일한 동작 수행)\
   정답 코드에서는 상,하 이동방향일 때 행 반복문 열 반복문 순서는 그대로 두고,  Map\[j]\[i]로 바꿔주었음.
2. 이동 방향에 따라 **입력받은 배열 값을 비교해**서 같으면, 새로운 배열에 값을 합쳐준다.\
   \=> 5-6개의 코드를 봤지만, 새로운 배열의 값과 원래 배열값을 비교해서 처리한다.

2번째 풀었을 때 틀린 이유

1. 상,하 : 열 단위\
   **좌,우** : **행 단위**, **인접 열값끼리 비교**하기 때문에 **targetIdx가 열에 들어가야함.**
2. **하, 우 방향 이동** : **행 또는 열이 N-1번째부터 시작**하기 때문에 **targetIdx 또한 N-1에서 시작**해서 1씩 감소야하고, **lastNum과 map\[i]\[j]가 같을 때** 또한, **targetIdx+1 로 변경**해줘야한다!\
   tmp\[i]\[target+1] \*= 2; tmp\[target+1]\[j] \*= 2;

정답 도출 스킬

입력받을 때 입력 배열의 최댓값을 ans에 저장하고, 숫자가 같은 칸이 나올 때 그 숫자가 최댓값인 ans와 같다면 ans도 함께 업데이트한다!
