- [JS] 자바스크립트 자동 형변환을 이용해서 쉽게 숫자를 문자열로 바꾸기+프로그래머스 129332024년 08월 02일
- 주사위 clice
- 작성자
- 2024.08.02.:22
반응형모던 자바스크립트 딥다이브에서 타입 변환(형변환)파트를 읽던 중 발생한 일이다.
아래와 같은 구절이 눈에 띄었다
명시적 형변환과 암묵적 형변환에 대해 간단히 짚고 넘어가자.
명시적 형변환 (Explicit Type Conversion):
* 프로그래머가 코드에서 명확하게 타입 변환을 지정한다
* 예시: Number("123"), String(123), (10).toString()
* 코드 가독성이 높고, 코드 리뷰 시 의도를 명확히 알 수 있다
암묵적 형변환, 자동 형변환 (Implicit Type Conversion)
* 자바스크립트 엔진이 자동으로 타입을 변환해준다
* 예를 들어 10 + ''처럼 숫자 10 뒤에 빈 문자열('')을 합하면숫자 10을 문자열 "10"으로 변환된다명시적 형변환이 명시적으로 형 변환을 한 다는 것을 적어주니까, 더 좋다고 생각할 수 있다
하지만 경우에 따라 암묵적 형변환이 더 적당한 경우도 있다
그럼 관련 프로그래머스 문제를 풀어보자
프로그래머스 12933 정수 내림차순으로 배치하기
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12933
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
- n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return 118372 873211 문제 풀이 설계
오름차순으로 정렬해야 하니, sort 함수를 써야 한다
그런데 이건 배열에서 적용 가능한 메소드이다
그럼 숫자를 문자열로 바꾸고, 문제에 맞게 조작해보자.
1. 숫자를 문자열(배열)로 변환한다
const solution = (n) => { (n+''); }
숫자 4231이 이 과정을 통해 "4231"이 된다
2. 문자열(배열)을 하나씩 쪼개준다
const solution = (n) => { (n+'').split(''); }
문자열은 배열이다. 그래서 ["4231"]이었던 배열이, 이 과정을 통해 ["4", "2", "3", "1"]이 된다
3. sort 함수를 이용해 오름차순으로 정렬한다
const solution = (n) => { return (n+'').split('').sort((a,b)=>b-a); }
sort 함수에 의해 오름차순 ["4", "3", "2", "1"] 로 정렬된다
sort 함수가 어떻게 동작하는지 궁금한 사람은 sort 함수의 동작 원리에 대해 자세히 정리해둔 이 글을 읽어보길 바란다
3. 정렬이 잘 된 문자열(배열)을 다시 하나로 합쳐준다
const solution = (n) => { return (n+'').split('').sort((a,b)=>b-a).join(''); }
["4", "3", "2", "1"]이 ["4321"]이 되었다.
4. 현재는 문자열이므로, 문제에서 원하는 출력값(실수)와 타입이 일치하지 않는다
"1234" 를 1234로 바꾸어 주어야 한다
문자열을 실수로 바꾸어주는 Number() 메소드를 사용하자
const solution = (n) => Number((n+'').split('').sort((a,b)=>b-a).join(''))
["4321"] -> 4321이 되었다.
코테 문제를 풀다보면 숫자 입력 값을 배열로 바꾸어야 할 때, 문자열로 바꾼 뒤 배열로 바꾸는 방법이 자주 쓰인다
이때 문자열을 바꾸는 과정에서 오늘 알아본 방법을 사용한다면 코드를 조금 더 쉽게 작성할 수 있다
또한, '자바스크립트 딥 다이브' 이 책 엄청나게 추천합니다, 프론트엔드 개발자 필독서 ⭐️⭐️⭐️
Ⓒ clice lee
clice의 개발일지 입니다
반응형'프론트 > Javascript Typescript' 카테고리의 다른 글
[JS] for in 문으로 효율성 테스트 실패하기 (프로그래머스) (2) 2024.09.10 자바스크립트 실행 컨텍스트: 예제를 통해 쉽게 이해하기 (1) 2024.08.28 [JS] 자바스크립트 약수 구하기 (Math.sqrt로 시간 복잡도 줄이기) (0) 2024.08.02 [JS] 로그인 성공? - 프로그래머스 120883 Map의 has get 메서드, some, 구조분해할당 (0) 2024.07.12 [JS] 절대 사용하면 안되는 eval 함수에 대해 (프로그래머스 120902 문자열 계산하기) (2) 2024.07.08 다음글이전글이전 글이 없습니다.댓글