[Javascript] LV.0 문자열을 정수로 변환하기

은비·2023년 9월 1일
1

Programmers_CodingTest

목록 보기
37/72
post-thumbnail

문제 설명

숫자로만 이루어진 문자열 n_str이 주어질 때, n_str을 정수로 변환하여 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n_str ≤ 5
  • n_str은 0부터 9까지의 정수 문자로만 이루어져 있습니다.

입출력 예

n_strresult
"10"10
"8542"8542

입출력 예 설명

입출력 예 #1

  • "10"을 정수로 바꾸면 10입니다.

입출력 예 #2

  • "8542"를 정수로 바꾸면 8542입니다.

✍ SOLUTION1

const solution = (n_str) => Number(n_str);

/* 
내가 처음 작성한 코드이다.

Number(n_str)처럼 함수로 사용하면 문자열이나 다른 값을 Number 타입으로 변환한다. 
만약 만약 인수를 숫자로 변환할 수 없으면 NaN을 리턴한다.
*/

✍ SOLUTION2

const solution = (n_str) => ~~n_str;

/*
여기서 사용된 ~~는 비트 NOT 연산자이다. 이 연산자는 피연산자의 각 비트를 반전시키지만, 
두 번 적용하면 원래의 값으로 돌아오게 된다.
JavaScript에서 비트 NOT 연산자를 숫자가 아닌 값에 적용하면 해당 값이 먼저 숫자로 변환된다. 
그러므로 ~~를 문자열에 적용하면 해당 문자열이 숫자로 변환되게 된다.
*/

✍ SOLUTION3

const solution = (n_str) => Math.floor(n_str);

/*
Math.floor() 함수는 주어진 숫자보다 크지 않은 가장 큰 정수를 반환한다.
그런데 JavaScript에서는 문자열이 숫자로만 이루어져 있다면, Math.floor()와 같은 수학 함수가 
암시적으로 해당 문자열을 숫자로 변환한다. 
따라서 Math.floor(n_str)는 먼저 n_str을 숫자로 변환하고, 그 결과에 Math.floor()를 적용하여 
소수점 아래를 버린다.

하지만 주어진 문제에서는 n_str이 항상 정수 값을 갖는다고 했으므로, 사실상 Math.floor()의 
동작은 불필요하며 단순히 타입 변환이 일어나게 된다.
*/

✍ SOLUTION4

const solution = (n_str) => parseInt(n_str);

/*
parseInt() 함수는 주어진 문자열을 정수로 변환한다.
문자열에서 숫자를 파싱하며, 파싱이 불가능한 문자가 나오면 그 시점까지의 숫자만 반환한다. 
하지만 여기서는 n_str이 항상 숫자만 포함하므로 전체 문자열이 정수로 변환된다.

SOLUTION2, SOLUTION3의 ~~나 Math.floor()보다 더 직관적이고 명확하며 일반적으로 
JavaScript에서 자주 사용되는 방식이다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글