개발 이모저모/프로그래머스 알고리즘

[Algorithm] 프로그래머스 레벨[0] 풀이 - (Javascript)(10)

creativeDeveloper! 2023. 4. 13. 00:04
728x90

■ 팩토리얼

 

  • 팩토리얼 문제는 원리는 이해했지만, 접근방식이 잘 떠오르지 않아 고민을 많이 한 문제이다.
  • i와 factorial 변수를 사용해 반복문을 돌면서 i! 를 계산한다.
  • factorial은 현재까지의 i! 값을 저장하고,
  • i!이 n 이하인 경우에는 i를 1씩 증가시키며 i!값을 계산한다.
  •  반복문 while을 빠져나올때는 i-1을 반환해주기로한다.
  • 그 이유는 i! <= n 을 만족하는 가장 큰 i값이므로 i-1이 n보다 작거나 같은 가장 큰 i 값이기 때문이다. 

 


■ 모음 제거

 

  • 이 문제의 접근방식은 제거하려고자하는 모음 5개를 배열에 담아준뒤 빈문자열 result와 비교후
  • remover에 담긴 문자열을 제외한 문자열을 반환해주기로 한다.
  • 제외한 원소를 표현하기위해 => filter함수를 써주고 
  • remover 변수가 포함 하지 않는 원소들을 filtering해서 반환해주고,
  • join 함수를 사용해서 큰따옴표와 합쳐서 반환해준다.

■ 문자열 정렬하기(1)

 

  • 이 문제의 접근방식은 위에 문제와 비슷해서 금방 풀릴 것으로 예상했지만 의외의 복병이 있었다.
  • 바로 큰따옴표를 제거하는 방법이었다.
  • 처음에는 replaceAll 함수를 사용해서 큰따옴표를 정규식으로 바꾸고 실행시켰다.
  • 그랬더니 각각의 숫자에 큰따옴표가 남아있었다.
  • 그래서 큰따옴표를 제거하는 방법에대해 구글링 한 결과
  • JSON.stringify 함수를 사용해 배열을 JSON 문자열로 변환해준다. 변환된 JSON 문자열에서 replaceAll 함수를 사용하여 큰따옴표를 제거했다.
  • 그랬더니, 배열 자체에 큰따옴표가 붙어버렸다.
  • 그래서 다시 JSON에 대해 구글링 한결과,
  • JSON.parse 함수를 사용하여 JSON 문자열을 파싱하여 다시 배열 형태로 변환한 후 반환하였다.
  • 휴...
  • 간단한 문제일 줄 알았는데 생각보다 복잡했고,
  • 다른 사람들의 풀이를 보니
  • 접근 방식이 처음부터 정규식으로 숫자를 전역검색한 후  풀었더라...

■ 숨어있는 숫자의 덧셈(1)

 

  • 이 문제의 접근방식은 먼저 자연수만 추출을 한뒤, 문자열로 이루어진 자연수들의 합을 구하기로한다.
  • answer 를 0으로 초기화 한뒤,
  • 자연수를 추출하기위해 filter 함수를 사용해서 자연수를 구하기 위한 조건을 걸어준다 => x > 0
  • 여기까지하면 위 사진처럼 "1,2,3,4"  라는 결과가 나온다. 이것을 통해 정답에 접근했음을 알수 있다.
  • 이제 합계를 구하기 위해 reduce 함수를 사용해야 한다. 
  • reduce 함수는 배열의 모든 요소를 순회하면서 누적 합산 한다.
  • 리듀서 함수의 사용방법은 mdn을 참고하였다.
const array1 = [1, 2, 3, 4];

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue
);
console.log(sumWithInitial);
// Expected output: 10
  • 그리고 parseInt 함수를 사용해서 문자열을 숫자로 변환시켜준다.

728x90