본문 바로가기

Algorithm

[알고리즘] #23 자연수 뒤집기 | 프로그래머스 | map(Number) | parameter 와 argument

728x90

자연수 뒤집기 알고리즘 문제이다.

 

https://programmers.co.kr/learn/courses/30/lessons/12932

 

코딩테스트 연습 - 자연수 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345

programmers.co.kr

 

 

 


 

 

문제 설명

 

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

 

제한 조건
 
  • n은 10,000,000,000이하인 자연수입니다.

 

 

입출력 예

 

 

 

 


 

 

 

< 문제 풀이 >

 

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
function solution(n) {
    let str = n + '';
    let arr = str.split('');
    arr = arr.map(Number);
    arr = arr.reverse();
    return arr;
}

 

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

나의 계획. 12345를 문자열로 바꾼다음 split로 각각 1, 2, 3, 4, 5로 나눠서 배열에 담는다. '1' 같은 문자엘리먼트로 바뀐 arr를 다시 숫자로 바꿔준다. 이때 map(Number) 메소드를 사용하니 숫자로 한 번에 바뀌었다. 다음으로 reverse()메소드를 사용해서 54321로 반전시켜준다. 

 

 


 

 

궁금증 풀기

 

 

여기서 map(Number) 메소드를 쓰긴 했지만 정확이 어떤 원리로 작동하는지는 몰랐다. 그래서 찾아보았더니 stack overflow에서 나와 같은 물음을 가진 사람이 있었다.

 

.map(Number);

 

이 코드는

 

.map((str, ind, arr) => Number(str, ind, arr));

 

이것을 줄인 것이다.

 

 

여기서 .map의 문법을 다시 살펴보자.

 

Syntax

array.map(function(currentValue, index, arr), thisValue)

 

array의 메소드인 map은 함수안에 argument가 현재값(엘리먼트), 인덱스, 현재배열, thisValue로 이루어져있다.

* 여기서 thisValue는 콜백함수와 관련된 것인데, 콜백함수는 나중에 다시 한 번 정리해야할 것 같다.

 

그래서 문법에 맞게 표현한다면 

 

.map((str, ind, arr) => Number(str, ind, arr));

 

이렇게 표현하는 것일텐데 이 안에 argument 값들을 모두 생략하고 .map(Number)만 적은 것임을 알 수 있다. stack overflow에서 이 답변을 적어주신 분에 따르면 이 생략이 항상 동작하지는 않지만 동작하는 경우에는 매우 편리하다고 한다.

 

 

 


 

 

map(Number)에 대해서 찾다가 parameter와 argument 차이에 대해서 알아보게 되었다.

 

function prac (receive1, receive2) {
	return '여기 있는 것은 파라미터야'
}

 

어디서부터 받아서 사용하는 것은 파라미터라고 부른다. 이 receive1과 receive2는 파라미터이다.

 

prac (value1, value2)

 

받아서 사용하라고 전달해주는 것을 argument라고 부른다. 이 value1, value2는 argument이다.

 

이제 parameter와 argument를 구분하여 부를 수 있게 되었다.

 

 

 


 

 

다른 사람들은 어떻게 풀었을까?

 

https://programmers.co.kr/learn/courses/30/lessons/12932/solution_groups?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

참고

stack overflow : 어떻게 map(Number)만 썼는데 배열 안을 숫자로 바꿔주는 지 알고 싶어요.  https://stackoverflow.com/questions/48343478/what-does-mapnumber-do-here 

argument 와 parameter의 차이 http://taewan.kim/tip/argument_parameter/

parameter 와 argument의 차이 https://velog.io/@colki/JS-parameter-%EC%99%80-argument-%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%9D%B8%EC%88%98-%EC%9D%B8%EC%9E%90 

Callbacks https://www.w3schools.com/js/js_callback.asp

728x90