Array.prototype.reduce empty array로 호출 시 init value 없으면 런타임 에러 발생
⭐ 따라서 반드시 init value 0으로 넣어주는 습관 들이기 ⭐
대/소문자 상호 변경 시 string.prototype.toUpperCase, string.prototype.toLowerCase 사용
⭐ 등장 횟수 셀 때, Array.prototype.filter를 통해 간단히 셀 수 있으면 우선 사용. (Map은 추후 사용)
50 k진수에서 소수 개수 구하기
isPrime 알고리즘
<= 1이면 소수 아님. *1도 소수 아님.
[2, Math.sqrt(n)] 사이 나눗셈 수행. *<= Math.sqrt()
Number K진수 변환: Number.prototype.toStrting(base) 사용 * base 없으면 10진수 문자열로 변환.
54 압축
Array.prototype.slice vs Array.prototype.splice vs Array.prototype.substr 차이
Map/Set에 초기값 빠르게 설정하는 방법: for문 사용해 key에 맞는 인덱스 추가
58 n진수 게임
Number.prototype.toString([base])는 9가 넘는 경우, 소문자 알파벳을 반환하므로 String.prototype.toUpperCase() 처리 필요
61 주차 요금 계산
문제 꼼꼼하게 잘 읽기. 오해하면 최소 -30분!
여기서는 주차 요금을 하루에 한 번 계산.
for-in문(객체용)과 for-of(Iterable 순회)문 헷갈려서 작성하지 않기. 안 돌아갈 수 있음.
오타 주의하기 ||를 |로 쓰면 이상한 곳에서 버그 발생
오픈 채팅방
62 파일명 정렬
정규 표현식 사용
const reg = /(\D*)([0-9]*)/i;
String 빌트인 내장 객체 사용
String.prototype.match(regex) -> [ '12', index: 3, input: 'img12.png', groups: undefined ]
상/하/좌/우 당기기 방식 -> String.prototype.padStartString.prototype.padEnd 적절히 사용
const toRight = row.join('').replaceAll(X, '').padStart(m, X).split('')
80 괄호 변환
예외처리해서 빨리 종료할 수 있는 조건이 확실하다면 시간 단축을 위해 처리해주기 예_ 처음부터 균형 잡힌 문자열이면 바로 반환 ⭐ 단, 확실하지 않다면 도전하지 말자!
반환값을 템플릿 문자열로 작성하면 가독성이 좋음
문자열 -> 배열 변환하는 방법 (1) Array.prototype.from(Iterable/array-like obj) (2) [...str]
문제 조건이 확실히 while문으로 처리된다면, 굳이 어렵게 for문 사용하지말고 while로 처리해 간단하게 처리하라 ⭐ ⭐ ⭐
72 두 큐 합 같게 만들기
⭐ 투 포인터 풀이 방향
특정 범위가 만족해야할 조건 정의하기
while문의 종료 조건 파악하기:
eg. 1 ≤ queue1의 길이 = queue2의 길이 ≤ 300,000 조건에 의해 300000으로 잡아서 for문을 돌려줄 수 있음
-> 종료 조건 파악이 어렵다면, 우선 시도해보기 : 길이 * 2, 3, ....
73 메뉴 리뉴얼
⭐ 성찰
조합이나 순열 구할 때, 사전 정렬이 필요한지 꼭 점검하기
💡 단, 이 때, 조합 'AB' = 'BA', 'ABCD' = 'DBAC' 으로 동일해야하므로, 조합을 구하기 전, 반드시 문자열을 정렬 처리 💡
DFS로 조합 구할 때는 순열과 다르게 DFS(cnt, startIdx)로 시작 인덱스 필요(이전까지 확인한 부분은 재처리할 필요가 없기 때문)
자료 구조 내 등장 횟수 count시 -> new Map() 사용. map.prototype.set, get, size 활용
74 방금 그 곡
⭐ 성찰
A#을 a로 치환해 A와 A# 구분. (길이를 유지해야하기 때문에 해당 방식 사용)
ㄴ String.prototype.replace
문자열 반복 및 자르기에 각각 String.prototype.repeat(횟수), String.prototype.slice(startIdx, endIdx) 사용
cf) 배열 반복 및 자르기에 각각 Array.prototype.concat()을 반복 처리, Array.prototype.slice(startIdx, endIdx) 사용
시간 구하는 함수: (new Date() - new Date(1995-10-31 08:00:00)) / 60000 형태로 간단히 계산 가능
81 수식 최대화
가능한 케이스가 많지 않은 경우라면 굳이 DFS 할 필요 없이 하드 코딩 하는 것도 괜찮음.
다시 풀어볼 문제
[프렌즈4블록] #63 [두 큐 합 같게 만들기] #72 [메뉴리뉴얼] #73 [방금 그곡] #74
성찰
52 캐시
51 튜플
49 뉴스클러스터링
50 k진수에서 소수 개수 구하기
54 압축
58 n진수 게임
61 주차 요금 계산
오픈 채팅방
62 파일명 정렬
63 프렌즈 4블록
80 괄호 변환
72 두 큐 합 같게 만들기
⭐ 투 포인터 풀이 방향
73 메뉴 리뉴얼
⭐ 성찰 조합이나 순열 구할 때, 사전 정렬이 필요한지 꼭 점검하기 💡 단, 이 때, 조합 'AB' = 'BA', 'ABCD' = 'DBAC' 으로 동일해야하므로, 조합을 구하기 전, 반드시 문자열을 정렬 처리 💡 DFS로 조합 구할 때는 순열과 다르게 DFS(cnt, startIdx)로 시작 인덱스 필요(이전까지 확인한 부분은 재처리할 필요가 없기 때문) 자료 구조 내 등장 횟수 count시 -> new Map() 사용. map.prototype.set, get, size 활용
74 방금 그 곡
⭐ 성찰
81 수식 최대화