티스토리 뷰
오늘 푼 5가지 문제는 숫자, 문자열 데이터를 골라내서 가공하는 문제였다.
[푼 문제 목록]
- 숨어있는 숫자의 덧셈
- 순서쌍의 개수
- 문자열안에 문자열
- 자릿수 더하기
- 모음 제거
각각의 요소를 조작해야 할 경우, 매개변수로 들어온 값이 string일 때에는 주로 배열로 변환해서 배열 내장 메서드를 활용한다.
String.prototype.split()
문자열을 한 char 단위로 쪼개고싶을 때에는 .split("") 을 해주면 된다. split(구분자) 구분자가 공백이 될수도 있고 ""아무것도 없는 따옴표를 넣어주면 apple -> a,p,p,l,e로 쪼개준다. 새배열을 반환하는 것은 아니므로 변수에 담아줘야 한다.
내 경우는, 숫자로 들어온 매개변수 n값을 toString()을 통해 형변환 시켜준 뒤 ... (전개 연산자)를 통해서 각 요소를 쪼갰다.
let answer = [...n.toString()];
Array.from()
참고로 데이터가 문자열이고 각각의 char요소로 쪼개고싶을 때는 Array.from()을 활용하면 손쉽게 쪼갤 수 있다.
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
Array.prototype.reduce()
reduce는 누적된 값을 반환할 때 좋다. 초기값을 설정해줄수도 있으며 생각지도 못한 부분은 만약 배열의 요소가 string값이고 number로 형변환 한 뒤, 더한 값을 return해야 한다면 앞 뒤에 Number()로 형변환 할 필요없이 초기값을 0으로 주면 acc 의 값은 숫자가 된다. cur 값만 Number로 형변환해주면 number + number 연산이 되기 때문에 두 값을 더한 값을 리턴해줄 수 있다. 글로 이해가 잘 안되기 때문에 아래의 예시를 보면 이해가 잘 될 것이다.
// 내 코드
function solution(n) {
let answer = [...n.toString()];
return answer.map((a) => Number(a)).reduce((a, b) => a + b);
}
- 내 코드에서는 map을 통해서 모든 배열의 값들을 number로 형변환 해준 뒤 reduce를 사용했다.
// 남의 코드
function solution(n) {
return n
.toString()
.split('')
.reduce((acc, cur) => acc + Number(cur), 0);
}
- 다른 풀이에서는 map을 쓰지않고 reduce내에서 cur값만 Number로 형변환해줬다.
String.prototype.replace() + 정규 표현식
function solution(my_string) {
return my_string.replace(/a|e|i|o|u/g, '');
// replace(/[aeiou]/g, "") 와 동일
}
- replace는 인자로 패턴(string 혹은 정규표현식)과 대체할 값(string 혹은 function), 2개의 인자를 받는다.
- 나는 string에서 모음인 a,e,i,o,u를 걸러내야 했는데 정규표현식 관련 내용을 찾아보니 |가 or연산자인 것을 발견해서 위와 같이 작성했다.
- 타인의 코드에서는 [aeiou] 로 해결했길래 무엇인지 찾아보니 2가지 방법이 있는 거 같았다.
- 정규 표현식 개념 사이트 링크
Array.prototype.includes() // ES6
매개변수로 str1, str2 두 개의 string 값을 받고 str1에 str2가 포함되는 지 확인할 때 includes를 활용했다.
특이한 점은 split()을 통해서 코드를 작성한 사람도 있었는데.. 저렇게 나눴을 때 어떤 값이 나오는 지 확인해봐야 한다.
// 남의 코드: str1에 str2가 포함되면 return 1 아니라면 2
function solution(str1, str2) {
return str1.split(str2).length > 1 ? 1 : 2;
}
다른 사람들은 search(), indexOf(), match()등을 활용했다. 내 경우는 true false값을 반환하는 직관적인 내장 메서드가 좋을 거 같아 includes를 사용했다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스 | JS] lv.1 예산 (0) | 2023.05.04 |
---|---|
[프로그래머스 | JS] lv.1 최대공약수와 최소공배수 (0) | 2023.05.02 |
[프로그래머스 | 0단계] 배열의 유사도, 옷가게 할인받기, 중앙값 구하기 (0) | 2023.01.19 |
[수학문제] 100! 의 끝에 0의 개수는 몇이나 있을까? (0) | 2022.11.03 |
[백준 | node.js] 백준문제 2588번 (JS 자동 형변환) (0) | 2022.04.25 |
- Total
- Today
- Yesterday
- 프리온보딩 프론트엔드 챌린지 3월
- nvm 설치순서
- fs모듈 넥스트
- 원티드 3월 프론트엔드 챌린지
- D 플래그
- reactAPI
- 타입스크립트 DT
- 원티드 FE 프리온보딩 챌린지
- aspect-ratio
- nvm경로 오류
- 타입스크립트 장점
- getStaticPaths
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 형제 요소 선택자
- float 레이아웃
- 항해99프론트
- 항해99추천비추천
- is()
- && 셸 명령어
- Prittier
- 틸드와 캐럿
- 부트캠프항해
- 항해99프론트후기
- tilde caret
- getServerSideProps
- ~ ^
- 프리렌더링확인법
- 원티드 프리온보딩 FE 챌린지
- text input pattern
- grid flex
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |