오늘은 단순한 코딩 문제 푼 것을 기록해 놓는다.
로그인 관련 RFC 문서 읽기와 테스트 코드 작성 조사중에 있다.
- 프로그래머스 30분 - 순서쌍의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/120836
- 프로그래머스 30분 - 모음 제거
https://school.programmers.co.kr/learn/courses/30/lessons/120849
※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※
모음 제거
모음 제거
순수 for문
function solution1(my_string) {
let newStr = ''
for (let char of my_string) {
if (char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u') {
continue;
};
newStr += char;
}
return newStr;
}
for문과 정규식 테스트
function solution2(my_string) {
let newStr = '';
const regex = /a|e|i|o|u/; // 통과
// const regex = /(a|e|i|o|u)/; // 통과
// const regex = /a|e|i|o|u+/; // 통과
// const regex = /(a|e|i|o|u)+/; // 통과
// const regex = /(a|e|i|o|u)+/g; // X (meet => met)
for (const char in my_string) {
if (!regex.test(char)) {
newStr += char;
}
}
return newStr
}
정규식과 replace 조합
function solution3(my_string) {
// const regex = /a|e|i|o|u/; // -> TypeError: String.prototype.replaceAll called with a non-global RegExp argument
const regex = /a|e|i|o|u/g; // => replace, replaceAll 모두 '전부 교체'한다!
return my_string.replace(regex, '');
}
배운 것:
- for (const char in my_string) 에서, const일 수 있는 이유: const char 자체가 매 루프마다 새롭게 '선언'되는 원리. 재할당 아님.
- for (let i = 0; i < my_string.length; i++) => 여기서 let i는 루프마다 '재할당'되는 게 맞음.
- for 문에서 반복 변수를 let으로 했을 때와 const로 했을 때의 차이, 가능한 점?
- regexp.test는 내부적으로 전체 for문을 한 번 도는 걸까?
순서쌍의 개수
순서쌍의 개수
루프 반만 돌기
const solution2 = (n) => {
let count = 0;
for (let i = 1; i < Math.sqrt(n); i++) {
if (n % i === 0) {
count++;
}
}
const addOne = n % Math.sqrt(n) === 0;
return count * 2 + addOne;
}
⇒ 사실 1부터 n까지 전부 돌거나, 1부터 n의 제곱근까지만 돌거나 모두 시간 복잡도는 O(N)으로 별 차이 없다. 그래도 다른 접근법을 생각해 보았다는 것을 어필 포인트로 삼을 수 있겠다.
Sliding window 기법?
function solution4(n) {
let count = 0;
let left = 1, right = n;
while(right > 0){
if(left * right === n) {
count++;
left++;
right--;
continue;
}
if (left * right > n) {
right--;
continue;
}
left++
}
return count;
}
Uploaded by N2T