일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- npm
- Python
- 백준
- 함수
- 고득점kit
- 문자열
- 자바스크립트
- Linux
- node.js
- express
- 코테
- BFS
- Sort
- 프론트엔드
- dfs
- 웹개발
- 코딩테스트
- JavaScript
- JS
- 프리코스
- 그래프
- JetsonNano
- OpenCV
- 최단거리
- 우테코
- 그리디
- 프로그래머스
- 파이썬
- 알고리즘
- 우아한테크코스
- Today
- Total
공대생
Level 1 - 문자열 다루기 기본 본문
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예

이 문제의 key포인트
-> 문자열이 숫자로만 이루어져있는지 판단하는 방법이 중요(parseInt, inNaN, Number)
이때 히든 케이스들이 많이 있으므로 최대한 모든 경우의 수를 고려해봐야 한다.
자료구조 및 알고리즘:문자열
풀이
1차시도 (isNaN 문제)
function solution(s) {
let len = s.length;
if (len === 4 || len === 6) {
if (isNaN(s)) return false
return true
}
}
isNaN에 문자열 s 자체를 넣었을 때 일부 테스트케이스가 통과되지 않는 것을 확인하였다.
이는 예외가 존재하기 때문인데, 예를 들어 문자열 s가 "1e22" 처럼 지수표현식이거나 "0x1234" 처럼 16진수 표현식인 경우 이를 문자열로 인식하지 않고 바로 숫자로 변환하기 때문에 올바른 결과가 나오지 않는다.
따라서 for문을 이용해서 문자열 하나하나가 숫자인지 확인하는 방법(parseInt를 한 다음 isNaN 함수 사용)을 사용해야겠다고 생각했다.
2차시도 (forEach 문제)
function solution(s) {
let len = s.length;
if (len === 4 || len === 6) {
[...s].forEach(item => {
if (!parseInt(item)) return false
})
return true;
}
return false;
}
문자열 길이가 4이거나 6인 문자열을 대상으로 s문자열을 배열로 만들어서 forEach문을 돌렸다.
하지만 false가 나와야 할 케이스에서 계속 true가 나오는 문제가 발생했다.
알고보니 forEach 함수가 비동기적으로 실행되기 때문에 forEach문이 끝나기 전에 그 아래의 return true 문이 먼저 실행되어서 생기는 문제였다. 이를 for ~ of 문으로 바꿔주어서 문제를 해결했다.
*** forEach 함수는 배열 요소를 돌면서 callback을 실행할 뿐, 한 callback이 끝날때 까지 기다렸다가 다음 callback을 실행하는 것이 아님 -> 순차처리가 되지 않음! ->그 대안으로 for문이나 for ~ of 문을 쓸 수 있다.)
완성코드
function solution(s) {
let len = s.length;
if (len === 4 || len === 6) {
for (item of [...s]) {
if (isNaN(parseInt(item))) return false;
}
return true;
}
return false;
}
forEach 동작원리 참고
https://velog.io/@hanameee/배열에-비동기-작업을-실시할-때-알아두면-좋을법한-이야기들
배열에 비동기 작업을 실시할 때 알아두면 좋은 이야기들
프론트엔드 인턴 면접에서 비동기 작업 관련 질문 대답 못한 뒤 외양간 뚝딱뚝딱 고치는 이야기.
velog.io
'스터디 > 프로그래머스' 카테고리의 다른 글
Level 2 - 점프와 순간 이동 Python (0) | 2022.10.09 |
---|---|
Level 2 - 최솟값 만들기 (js sort 제대로 사용하기) (2) | 2022.09.17 |
코딩테스트 고득점 kit, 정렬 - 가장 큰 수 (0) | 2022.05.26 |
코딩테스트 고득점 kit, 완전탐색 - 카펫 (0) | 2022.05.25 |
코딩테스트 고득점 kit, 해시 - 전화번호 목록 (0) | 2022.05.16 |