0~9까지의 문자열로 된 숫자 number를 매개변수로 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.
예시
number return
0123456789 | true |
01234 | false |
01234567890 | false |
6789012345 | true |
012322456789 | false |
과제 수행 조건
- CheckNumberDuplicate 로 과제 파일명을 생성한다.
출처: https://codingdojang.com/scode/488
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
내가 작성한 코드
export default function checkNumber(number){
const array = [];
array.push(...number.split(" "));
if(number.length<10||number.length>10){
return false;
}
const set = new Set(array);
if(array!==set){
return false;
};
if(array===set){
return true;
};
}
변경
export default function checkNumber(number){
const array = number.split("");
if(number.length !==10){
return false;
}
const set = new Set(array);
return JSON.stringify(array) ===JSON.stringify([...set]);
}
문제점
- number.split(" ")은 문자열을 공백으로 분리하여 배열을 생성하는 것이 아니라, 단순히 문자열을 공백 문자로 분리하려고 시도합니다. 예를 들어 number가 "0123456789"라면 number.split(" ")은 ["0123456789"]를 반환할 것입니다. 따라서, 각 문자를 배열에 개별적으로 추가하려면 number.split("")을 사용해야 합니다.
- if(array!==set)은 배열과 Set 객체를 비교하는 것이 아니라, 배열과 Set 객체의 내용을 비교하려는 것입니다. 그러나, 배열과 Set 객체는 다른 데이터 구조이기 때문에 항상 일치하지 않습니다. 배열과 Set 객체의 내용을 비교하려면, 배열을 Set 객체로 변환하여 Set 객체와 비교해야 합니다. 예를 들어 JSON.stringify(array) !== JSON.stringify([...set])과 같이 비교할 수 있습니다.
- array===set은 두 객체의 참조를 비교하는 것이기 때문에 항상 false를 반환합니다. 배열과 Set 객체는 서로 다른 객체이므로, 이러한 방식으로는 비교할 수 없습니다.
'Coding Test' 카테고리의 다른 글
23.3.27(정수 제곱근 판별) (0) | 2023.03.27 |
---|