자연수 n이하의 모든 정수를 검사한다.
각 정수의 약수가 몇 갠지 구한다.
예를 들어 1은 약수 1개, 2는 약수 2개, 3은 약수 2개, 4는 약수 3개, ... , n은 약수 cnt개
그 다음, 약수가 3개 이상일 때에만 ans변수를 증가시킨다.
function solution(n) {
let temp=new Map();
let answer=0;
for(let num=1; num<=n; num++){
let cnt=0;
for(let i=1; i<=num; i++){
if(num%i==0){
cnt++;
}
}
temp.set(num, cnt);
}
temp.forEach((value, key)=>{value>=3 ? answer+=1 : answer+=0 });
return answer;
}
근데 쓰고 나니...짜피 이중for문 돌릴 거였으면 굳이 map, set 썼어야 되나 싶다. 그러나 새로운 개념이 왕창 나왔으므로 기록함.
Array.prototype.map()이랑 다르다. 난 계속 헷갈렸었지만.
Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억한다. 모든 값이 키/값으로 사용될 수 있다.
Map에서의 키는 오직 단 하나만 존재한다.
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a'));
// 1
map1.set('a', 97);
console.log(map1.get('a'));
// 97
console.log(map1.size);
// 3
map1.delete('b');
console.log(map1.size);
// 2
console.log(map1.has('a'));
//true
console.log(map1.has(1));
//false
객체랑 맵이랑 뭐가 다르냐? Object는 Map과 유사한데,
(1) 둘 다 값을 가리키는 키를 설정하고
(2) 해당 값을 받아올 수 있으며
(3) 키를 삭제할 수 있고
(4) 키에 뭐가 저장되어 있는지 여부를 알 수 있음
차이점은 여러가지가 있지만, 주로
(1) Map의 키는 모든 값이 될 수 있지만 Object의 키는 String 혹은 Symbol이어야 한다는 것.
(2) Map은 키/값에 따라 정렬될 수 있지만 Object는 항상 정렬되진 않는다는 것.
(3) Map은 순회가능하므로 직접 반복 가능하지만 Object는 Object.keys 혹은 Object.entries, for...in를 사용해야 한다는 것.
난 아마 쓴다면 Map만 쓸 것 같다.
Map() : 새로운 Map 객체를 생성함
Map.prototype.size() : Map 객체의 키/값 쌍의 개수를 반환함
Map.prototype.clear() : Map 객체의 모든 키/값 쌍을 제거함
Map.prototype.delete() : Map 객체의 특정 키를 삭제. 삭제되었을 경우 true 반환, 없으면 false 반환. 이후에 map.has(key)를 실행하면 false 반환
Map.prototype.get() : 주어진 키에 해당하는 값을 반환. 값이 없으면 undefined 반환
Map.prototype.has() : 주어진 키에 해당하는 키가 있으면 true, 없으면 false 반환
Map.prototype.set() : Map 객체에서 전달된 키의 값을 설정. Map 객체를 반환
Map.prototype.keys() : Map 객체에 삽입된 순서에 따라 각 요소의 키를 포함하는 새로운 반복자 반환. ===맵의 모든 key 반환
Map.prototype.values() : Map 객체에 삽입된 순서에 따라 각 요소의 값을 포함하는 새로운 반복자 반환. ===맵의 모든 value 반환
Map.prototype.entries() : Map 객체에 삽입된 순서에 따라 [key, value] 두 개의 멤버 배열을 포함하는 새로운 반복자 반환
: Map 객체에 존재하는 각 키/값 쌍에 대해 순서대로 콜백함수 호출.
myMap.forEach((value, key) => {
console.log(`${key} = ${value}`);
});
// 0 = zero
// 1 = one
이런 식으로, value와 key값을 순서대로 돌면서 콜백함수를 호출하는 것!
new Map([['foo', 3], ['bar', {}], ['baz', undefined]])
.forEach(logMapElements);
// "m[foo] = 3"
// "m[bar] = [object Object]"
// "m[baz] = undefined"
다른 사람 풀이 중 가장 좋았던 풀이
function solution(n) {
var answer = 0;
for(let i = 4; i <= n; i++){
for(let j = 2; j < i; j++){
if(i % j === 0){
answer += 1;
break;
}
}
}
return answer;
}
다른 사람들 풀이 중 이게 제일 좋았다. 우선 약수를 2부터 설정해서 반복회수를 줄이고자 노력했다는 점이...
또한, 어차피 1, 2, 3은 약수 개수가 2개뿐이라 합성수에 포함 안 되니 버리고 시작했다.
앞으론 이렇게 풀어야지
출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map