https://school.programmers.co.kr/learn/courses/30/lessons/12918?itm_content=course14743#
[ 문제 설명 ]
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고
"1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
[ 문제 풀이 ]
첫번째 풀이 과정
function solution(s) {
if(s.length != 4 || s.length != 6) {
return false
}
let division = s.split("");
let a = division.map((item) => Number(item));
for (let i = 0; i < s.length; i++) {
console.log(Number.isInteger(a[i]));
return Number.isInteger(a[i]);
}
}
}
이렇게 했더니
"1234"가 왜 false가 나왔다 왜?
s.length != 4 || s.length != 6를 사용하면 항상 참(true)으로 평가된다.
이는 s.length가 4와 같지 않으면 6과 다르기 때문입니다. 이러한 경우 항상 return false 문이 실행되므로 입력된 문자열이 어떤 경우에도 "false"로 반환됩니다.
"나는 멍청이다"
function solution(s) {
if (s.length === 4 || s.length === 6) {
let division = s.split("");
let a = division.map((item) => Number(item));
for (let i = 0; i < s.length; i++) {
return Number.isInteger(a[i]);
}
}
return false;
}
"1234ab"가 false가 아닌 true가 나오지?
입력 문자열의 길이가 4 또는 6인 경우, 첫 번째 숫자가 정수인 경우에만 true를 반환하고, 나머지 문자는 무시한다.
이는 return 문이 for 루프 안에서 첫 번째 숫자를 검사하고 결과를 반환하고 루프를 종료하기 때문
"어쩐지, 나는 멍청이다22"
정답)
function solution(s) {
if (s.length === 4 || s.length === 6) {
let division = s.split("");
let a = division.map((item) => Number(item));
for (let i = 0; i < s.length; i++) {
if(!Number.isInteger(a[i])){
return false
}
}
return true;
}
return false;
}
정규식 사용해서 더 간결하게
function solution(s) {
return /^[0-9]{4}$|^[0-9]{6}$/.test(s);
}
정규식 없이 더 간결하게
function solution(s) {
if (s.length === 4 || s.length === 6) {
for (let i = 0; i < s.length; i++) {
if (s[i] < '0' || s[i] > '9') {
return false;
}
}
return true;
}
return false;
}
'0'가 문자열이 아니라 숫자인가요?
ㅇㅇ, '12'는 문자열, '1','2'는 숫자
Number.isInterger 메소드
<script>
Number.isInteger(0); // true
Number.isInteger(-100); // true
Number.isInteger(0.1); // false
Number.isInteger("문자열"); // false
Number.isInteger(Infinity); // false
Number.isInteger(true); // false
</script>
'프론트엔드로 가는 길 > 프로그래머스' 카테고리의 다른 글
59. k진수에서 소수 개수 구하기 - 2022 KAKAO BLIND RECRUITMENT (0) | 2023.09.14 |
---|---|
58. 체육복 (0) | 2023.09.14 |
56. 피보나치 수 (0) | 2023.09.11 |
55. 콜라츠 추측 (0) | 2023.05.05 |
54. 두 정수 사이의 합 (0) | 2023.05.02 |