문제: 자연수가 들어있는 배열 arr가 매개변수로 주어진다. 배열 arr안의 숫자 중에서 앞에 있는 숫자들부터 뒤에 중복되어 나타나는 숫자들 중복 횟수를 게산해서 배열로 return.
만약 중복이 없다면 배열에 -1 채워서 return.
링크: https://blog.naver.com/boostcamp_official/221978031932
나의 정답:
arr = [3,2,4,4,2,5,3];
arr.sort();
console.log(arr); // [ 2, 2, 3, 3, 4, 4, 5 ]
let answer = [];
let count = 0;
for (let i=0; i < arr.length; i++){
if(arr[i]===arr[i+1]){
count = count + 1;
}else if(arr[i] !==arr[i+1] && count){
answer.push(count+1);
count = 0;
}
}
if(answer.length === 0){
answer = [-1];
}
console.log(answer); // [ 2, 2, 2 ]
모범답안링크: https://blog.naver.com/boostcamp_official/222002632132
Set을 공부하고 다음 코테연습에서 활용해봐야겠다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set
모범 답안에서 힌트를 얻고 다시 해보았다.
let arr = [3,2,1,1,1,1];
let setOfArray = new Set([]);
let answer = [];
function countNumber(number){
let count = 0;
arr.forEach( element => (number === element)
&& (count += 1)
)
count > 1 ? answer.push(count) : null
}
function solution(arr){
arr.forEach(number => setOfArray.has(number)
? null
: (
setOfArray.add(number)
, countNumber(number)
)
)
return answer.length>0 ? answer : (answer.push(-1), answer) ;
}
let a = solution(arr);
console.log(a);
3항 연산자에서 return; 하고싶을때 null을 사용했는데 괜찮나 모르겠다!!! 결과는 같은데 문제가 없는걸까?
이전에는 set을 공부하고 활용하였고 이번에는 map 객체를 공부했다. 이를 이용해 또 답을 구했다.
let arr = [1,2,3,3];
let answer = [];
let myMap = new Map();
function count(number){
myMap.forEach((value,key) => (key === number)
? myMap.set(key,value+1)
: null
)
}
function solution(arr){
arr.forEach(number => myMap.has(number) ? count(number)
: myMap.set(number, 1)
)
myMap.forEach(value=> value>1 ? answer.push(value): null)
return answer.length > 0 ? answer : (answer.push(-1), answer)
}
let a = solution(arr);
console.log(a);
map에서 중요한 것은 .forEach(value,key) 이다.
무의식적으로 (key,value)를 넣어서 이상한 값이 나왔다..
arr.forEach(number => myMap.has(number) ? myMap.set(number, myMap.get(number)+1)
: myMap.set(number, 1)
)