알고리즘 공부하자

낭만개발자·2021년 3월 4일
0

알고리즘

목록 보기
3/20

알고리즘 짜는법에 대한 생각

이 글을 쓰는 이유가 알고리즘 공부를 많이 안하다 보니 for문을 만들어야 되는 상황일 때 항상 난감해지는 것 같다. 개발자인데 for문에 약하면 안될 것 같아. 그래서..

문제 : 사진에 수 중에 빨간 괄호 영역만 가져올 때.

해결

for문을 생각할 텐데, row 40부터 64까지 .slice(index, index + 14)로 24번 row를 반복 잘라서 붙이면 된다.
그러면 for문을 어떻게 만드느냐?

for(1; 2; 3){}

1. 시작 위치: 해결점에서 반복해야 할 상황의 시작 index를 기입한다.
위에서는 칼럼 32개 x (row 1부터 시작) 39개 + 1 = 1249가 시작 인덱스지만 위의 자료 배열은 0부터 시작할테니 -1 해서 1248로 볼수 있다.
for(int i = 32*39; ; ;)

3.step또는 증감식이라 보통 하지만 다음 index까지 갈 조건은 뭔데?
즉 for문이 1번 돌고 다음번, 2번째 돌때 시작 인덱스는 얼마냐? 그러면 그 시작 인덱스까지 어떤 조건을 추가해서 갈래? 뭐 이런 개념이다.
즉 위의 문제에선 첫 인덱스가 1248이면 column이 32개 이므로 2번째 돌때는 1248+32 = 1280이다 3번째 돌때는 다시 +32...
즉 다음 인덱스까지 갈 조건은 +32이므로
for(int i = 32*39; ; i += 32;) 로 적는다

2.어디까지 돌건가?(진행할래?)
전체 배열이므로 만약 위의 전체자료가 let arr 이라면 arr.length로 쓰면 된다.
for(int i = 32*39; arr.length; i += 32;)

즉 알고리즘을 짜야 하는데 for문 사용해야 하고, 그러면
내가 돌리고 싶은 1. 시작위치 랑 3. 첫번째 인덱스, 두번째 인덱스.. n번째 인덱스 사이의 증감 조건 만 알면 쉽게 짤 수 있다.

즉 저 문제에서 최종적으로 빨간 구역을 도려내려면..

for(int i = 32*39; i < arr.length; i += 32;){
result.push(arr.slice(i, i+14));
}


//만약 react의 setState()에 배열을 집어넣는다면
//.()slice로 새 배열 하나 만들어 준다. 아 그리고 2차원 배열 되니까 1차원으로 .flat()
let newReuslt = result.slice();
console.log(newResult.flat());

1부터 2048까지 배열 자연수를 넣어 만들고 위 코드로 잘라낸 출력 결과

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글