\(@^0^@)/
[TDL] 05/08 Today's-Done-List 본문
728x90
- Hello Coding 알고리즘 TIL 작성
- 자료구조 / 알고리즘 (Js ver.) 강의
해당 숫자의 자릿수 별 빈도수 구하기
(간단하게 정리하기 위해서 num값을 미리 지정하였음)
// 자릿수 계산
let result = [];
let num = 1234;
// 1. 배열안에 각 자릿수 별 index 생성.
for (let i = 0; i < 10; i++) {
result[i] = 0;
}
// 2. 각 자릿수의 빈도수를 적립.
while (num != 0) {
result[num % 10]++;
num /= 10;
num = parseInt(num);
}
console.log(result) // (10) [0, 1, 1, 1, 1, 0, 0, 0, 0, 0]
- 0부터 9까지의 총 10개인 숫자의 자릿수를 미리 생성해두고, 빈도수를 추가하기 위해
기본값 0으로 된 index 10개의 배열을 생성. - num이 0이 아닐 때까지 반복문을 돌면서
- 해당 숫자 % 10를 하면 일의 자리 숫자를 구할 수 있다.
=> 1234 % 10으로, 4를 구해서 result [4]에 1 추가. - 1234 / 10으로 123.4에서 정수만 나타내기 위해 parseInt 메서드로 소수점을 제거.
=> 123이 된다. - 해당 숫자 % 10를 하면 일의 자리 숫자를 구할 수 있다.
=> 123 % 10으로, 3을 구해서 result [3]에 1 추가. - 123 / 10으로 12.3에서 정수만 나타내기 위해 parseInt 메서드로 소수점을 제거.
=> 12가 된다. - 해당 숫자 % 10를 하면 일의 자리 숫자를 구할 수 있다.
=> 12 % 10으로, 2를 구해서 result [2]에 1 추가. - 12 / 10으로 1.2에서 정수만 나타내기 위해 parseInt 메서드로 소수점을 제거.
=> 1이 된다. - 해당 숫자 % 10를 하면 일의 자리 숫자를 구할 수 있다.
=> 1 % 10으로, 1을 구해서 result [1]에 1 추가. - 1 / 10으로 0.1에서 정수만 나타내기 위해 parseInt 메서드로 소수점을 제거.
=> 0이 된다. - num이 0이 되었으므로, 반복문을 빠져나온다.
- 그렇게 되면 result [4], result [3], result [2], result [1]에 하나씩 추가된다.
=> [0, 1, 1, 1, 1, 0, 0, 0, 0, 0]가 된다.
- 해당 숫자 % 10를 하면 일의 자리 숫자를 구할 수 있다.
2차원 배열 달팽이 만들기
- 입력받은 크기(4)의 정사각형으로, 아래 그림처럼 시계방향으로 돌면서 숫자를 채워 2차원 배열을 반환.
let length = 4;
let result = [];
for (let i = 0; i < length; i++) {
result[i] = [];
}
let direction = 1;
let x, y, num;
x = y = num = 0;
x--;
while (1) {
for (let i = 0; i < length; i++) {
x += direction;
result[y][x] = ++num;
}
length--;
if (length <= 0) break;
for (let j = 0; j < length; j++) {
y += direction;
result[y][x] = ++num;
}
direction *= -1;
}
console.log(result);
/*
0: (4) [1, 2, 3, 4]
1: (4) [12, 13, 14, 5]
2: (4) [11, 16, 15, 6]
3: (4) [10, 9, 8, 7]
*/
- 2차원 배열 생성
=> [ [ ], [ ], [ ] ] - 반복문 돌며 2차원 배열에 숫자 채우기.
- 반복문은 true로 하여, 계속 돌게 하고 예외를 줘서 break으로 빠져나가게 해 준다.
=> if (length <= 0) break; - 0을 할당받는 상수 x, y, num을 생성.
=> let x, y, num;
x = y = num = 0; - 한 방향이 아니라, 시계방향으로 돌며 숫자를 채워줘야 하기 때문에 방향을 설정하기 위해 상수 direction 생성.
상수는 1을 기본값으로 주고, 반대방향일 경우엔 -1을 할당해준다.
=> let direction; - 처음에는 for문을 돌리면서 x축방향으로 입력받은 값만큼 숫자를 채운다.
=> for (let i = 0; i < length; i++) {
x += direction;
result [y][x] = ++num;
} - 시작 방향 : 맨 처음 x축에서 시작할 때, 입력받은 값만큼 x축으로 이동하려면 direction이 1이 아니라 0으로 시작
(이유 : 현재 direction의 기본값이 1인 상태라서, x += direction 전에 이미 1이 들어가서 배열을 벗어나게 됨.)
따라서 x축에 --을 줘서 0으로 만들어, 사각형 밖에서 시작하여 계산하게 한다.
=> x--; - 그 뒤에 length를 하나 줄이면서, 다음 배열로 넘어간다.
=> length--; - y축방향으로 입력받은 값만큼 숫자를 채운다.
=> for (let j = 0; j < length; j++) {
y += direction;
result [y][x] = ++num;
} - 방향을 바꿔주기 위해서 -1을 곱해준다.
=> direction *= -1; - 다시 맨 위의 for문으로 돌아가서 x축에 -1 방향으로 가야 하는데, 그 의미는 반대로 추가되는 것이다.
(예를 들어, 1, 2, 3을 추가해야 한다면, [3, 2, 1] 이런 식으로) - 그 뒤에 length를 하나 줄이면서, 다음 배열로 넘어가고
- y축 방향에도 -1방향으로 가야 하기 때문에, 반대로 추가가 된다.
- 그 후, -1을 다시 곱해서 direction은 1이 되고
- for문으로 돌아가서 x축의 정방향 -> length를 하나 줄이고 -> y축 정방향 -> direction은 -1
- for문으로 돌아가서 x축 반대방향 -> length를 하나 줄이면 0이 되므로, 반복문을 빠져나오게 된다.
- 반복문은 true로 하여, 계속 돌게 하고 예외를 줘서 break으로 빠져나가게 해 준다.
스택 (Stack)
- 나중에 넣은 데이터가 먼저 나오는 LIFO(Last In First Out) 기반의 선형 자료 구조
- 구현 메서드 (method)
- 데이터 전체 획득 / 비어 있는지 확인 : Stack.getBuffer(), Stack.isEmpty()
- 추가 / 삭제 / 마지막 데이터 조회 / 크기 확인 : Stack.push(), Stack.pop(), Stack.peak(), Stack.size()
- 데이터 위치 / 존재 여부 확인 : Stack.indexOf(), Stack.includes()
- 주말 회고 (만족도 : 8)
[○] 1. 연결 리스트 - 대표 선출 문제 풀이
[△] 2. hello coding 알고리즘 책에서 연결 리스트 부분 읽고 정리 + 유튜브로 학습.
[○] 3. 배열 - 숫자 빈도수, 달팽이 만들기 문제 풀이
[ Χ ] 4. leetcode에서 배열, 연결 리스트 관련 문제 풀어보기
[△] 5. 스택, 큐 학습 + hello coding 알고리즘 책
연결 리스트 문제를 풀다가, 지난번에 그냥 스킵했던 배열 문제들을 풀었더니
연결 리스트가 더 어려워서 그런지 배열은 그래도 나름대로 푸는 나를 보며 뿌우듯했다... 현실은 아직 기초 문제들ㅠ
수요일에 코테에서 좌절을 맛보고 언제 공부해서 언제 그런 걸 다 풀 수 있게 되는 건가 싶었는데..
그래도 조금씩이지만 발전하고 있단 생각에 오랜만에 만족스럽고 집중도도 괜찮은 하루였다.
코테 이후로 목, 금, 토 3일 동안 중요한 일정도 있고 컨디션도 좋지 않았지만, 솔직히 나태해진 것도 있었다ㅠ
앞으로 다가오는 코테와 다른 테스트, 스터디를 위해서라도 다시 정신 차리고 열심히 해보자.
오랜만에 뽀모도로 사용하니깐 효과가 좋은 것 같아서 앞으로도 사용할 예정!
[ 출처, 참고 : 제로베이스 프런트엔드 스쿨 ]
728x90
'TDL' 카테고리의 다른 글
[TDL] 05/10 Today's-Done-List (0) | 2022.05.11 |
---|---|
[TDL] 05/09 Today's-Done-List (0) | 2022.05.10 |
[TDL] 05/05 Today's-Done-List (0) | 2022.05.05 |
[TDL] 05/04 Today's-Done-List (0) | 2022.05.04 |
[TDL] 05/03 Today's-Done-List (0) | 2022.05.03 |