function solution(n) {
let arr=Array.from({length:n}, (v, i)=>i+1);
console.log(arr.reduce((acc, v)=>acc+v));
}
solution(10)
단순히 for문을 사용해서 출력하는 것이 아닌, reduce메소드를 활용해서 풀 수 있는 문제이다.
또한, Array.from({length:n}, (v, i)=>i+1)
을 통해 n=5가 입력되었을 때 [1, 2, 3, 4, 5] 유사배열이 생성된다.
x%10
arr.splice(j, 1);
arr.splice(i, 1);
s.replace(/A/g, '#')
을 하면, s문자열에서 A를 모두 찾아서 #으로 바꾼다. s.replace(/A/, '#')
는 g이 없기 때문에, 그냥 s.replace(A, '#')
과 같이 첫번째로 발견되는 A만 #으로 대체한다. function solution(s, t) {
return str.split('').filter(v=>v===t).length;
}
let str="COMPUTERPROGRAMMING";
console.log(solution(str, 'R'));
str에서 특정 문자 R을 찾는 방식이다. for문을 통해 풀 수도 있지만, 배열로 변환 후 filter해서 푸는 방법도 있다.
function solution(s) {
return s.match(/[A-Z]/g).length;
}
let str="KoreaTimeGood";
console.log(solution(str));
str에서 대문자의 갯수를 구해보자.
match메소드는 문자열에서 정규식을 만족하는 것을 리턴한다. 여기서 s.match(/[A-Z]/g)은 ['K', 'T', 'G']를 리턴한다.
방법2
function solution(s){
let answer=0; //카운팅
for(let x of s){
if(x===x.toUpperCase()) answer++;
}
return answer;
}
'중복 제거'라는 타이틀에서 Set객체를 생각해서, 코드 1과 2는 Set객체를 통한 풀이이다.
function solution(s) {
let answer=new Set();
for(let x of s){
answer.add(x);
}
return [...answer].join('');
}
console.log(solution("ksekkset"));
function solution(s) {
s=s.split('');
return [...new Set(s)].join('');
}
console.log(solution("ksekkset"));
function solution(s) {
let answer='';
for(let i=0; i<s.length; i++){
if(s.indexOf(s[i])===i) answer+=s[i];
}
return answer;
}
console.log(solution("ksekkset"));
s.indexOf('k')=0
: (s="ksekkset"이라고 가정)'k'문자가 '처음'으로 발견되는 인덱스를 리턴한다.s.indexOf('k', 1)=3
: 1번째 인덱스이후 'k'문자가 있는 인덱스s.indexOf(문자)=-1
이면, 문자를 문자열에서 발견하지 못한 경우이다. 즉 문자가 문자열에 없을 때 -1을 리턴한다.function solution(s) {
return s.filter((v, i) => s.indexOf(v)===i);
}
let str=["good", "time", "good", "time", "student"];
console.log(solution(str));
function solution(s) {
return [...new Set(str)];
}
let str=["good", "time", "good", "time", "student"];
console.log(solution(str));
replace(/[^a-z]/g, '')
: 소문자가 아닌것을 모두 찾아서 ''로 대체하라(정규표현식 사용)parseInt(String, radix)
: String문자열을 radix(2-36)진법으로 변환한다. 만약 radix가 없을 때, String이 0으로 시작한다면 radix는 8진이거나 10진이다.function solution(str){
str=str.replace(/[^0-9]/g, '');
return parseInt(str, 10);
}
let str="g0en2T0s8eSoft";
console.log(solution(str));
console.log(s[s.length]); //undefined
console.log(s[s.length-1]); //E
console.log(s[s.length]===s[s.length-1]); //false
console.log(parseInt('030')); //30
console.log(Number('030')); //30
parseInt, Number를 통해 문자를 숫자로 변환할 때, 앞의 0은 자동 삭제된다.
arr=arr.sort((a, b)=> (a[0]+a[1])-(b[0]+b[1]));
//[ [ 2, 2 ], [ 4, 3 ], [ 4, 5 ], [ 6, 6 ], [ 10, 3 ] ]
arr.sort((a,b)=>a-b)
는 원본 배열을 변경시키기 때문에 대입하지 않아도됨big.splice(i, 0, small[j]);big.splice(i, 0, small[j])
와 같이 쓸 수 있다. big 배열의 i번째 인덱스에서 0개를 삭제하고, small[j]를 i번째 인덱스에 추가한다. for(let [key, val] of map){
...
}
[...map].sort();
와 같이,[...map].sort((a, b)=>b[1]-a[1])
와 같이 쓰면 된다. (여기서는 value를 내림차순 정렬한다) if(x===')'){
while(stack.pop()!=='(');
}
console.log('3'+'5'); //'35'
console.log(typeof('3'+'5')); //string
console.log(!isNaN('3')); //'3'이 숫자면 true (true)
x!==queue.shift()
검증하면서도 무조건 shift()는 됨)slice()
로 깊은 복사를 해줘야한다. function solution(arr) {
let answer=[];
const tmp=arr.slice().sort((a, b)=>a-b); //반드시 sort와 같은 메소드 쓰기 전에 arr.slice()해줄 것
console.log(tmp); //[1, 2, 3, 4, 5]
console.log(arr); //[1, 4, 3, 2, 5]
}
let arr=[1, 4, 3, 2, 5];
console.log(solution(arr));
arr.sort((a, b)=>{
if(a[0]===b[0]) return a[1]-b[1];
else return a[0]-b[0]
});
map.sort((a, b)=>{
if(a[0]===b[0]) return a[1].charCodeAt()-b[1].charCodeAt(); //a[1], b[1] 오름차순 정렬
else return a[0]-b[0];
});
2^n
(공집합 포함! 공집합 제외하려면 2^n-1
)DFS(v, sum+=arr[i])
와 같이 작성하면 안된다. sum자체가 바뀐다! 따라서, sum+arr[i]와 같이 써야한다. function solution(m, arr) {
let answer=0;
arr.sort((a, b)=>b-a); //내림차순 정렬
let i=0;
while(m!==0){
answer+=parseInt(m/arr[i]);
m-=(arr[i]*parseInt(m/arr[i]));
i++;
}
return answer;
}
let arr=[1, 2, 5];
console.log(solution(18, arr));
DFS(L+1, s+1, sum+arr[i]);
이 아닌, DFS(L+1, i+1, sum+arr[i]);
과 같이 사용해야한다.