[TIL] 241017 (선언형 & 명령형 프로그래밍 학습 / 배열과 연결 리스트 정리)

·2024년 10월 17일

TIL

목록 보기
191/268
post-thumbnail

오늘 한 일

  • 혼자살때 개선
    • 회의
  • 선언형 프로그래밍 & 명령형 프로그래밍 학습
  • 기업 지원 4건
  • 개념 정리
  • 알고리즘 코드카타
    • 가장 큰 수
    • 문자열로 변환
    • 문자열을 정수로 변환하기
    • 뒤에서 5등 위로

선언형 & 명령형 프로그래밍 학습

아래 링크에 연결된 유튜브 영상을 통해 학습했다.
감으로는 알겠지만 확실하게 학습하기 위해서는 직접 해보면서 느껴야할 것 같아서 이번 혼자살때 개선 프로젝트에서 리팩토링할 때 주로 사용하게 될 것 같다.
리액트를 명령형으로 짜면 안되는 이유? 예시코드로 알아보자! (+ 선언적 코드로 리팩토링 해보기)

알고리즘 코드카타

가장 큰 수

문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

풀이

function solution(numbers) {
  const answer = numbers
    .map((number) => String(number))
    .sort((a, b) => b + a - (a + b))
    .join("");
  return answer[0] === "0" ? "0" : answer;
}

쉽지 않은 과정 끝에 풀었다.
다른 부분은 크게 중요하지 않고 제일 중요했던 부분은 sort를 하는 부분이었다. sort를 사용할 때 그저 내림차순, 오름차순으로 정렬하는 방법만 알았지 다르게 응용할 방법을 생각한 적이 없었다.
이 문제에서 중요한 부분은 실제로 크기가 크더라도 꼭 해당 숫자가 앞에 온다고 가장 큰 수가 나오는 게 아니라는 점이다. 이를 해결하기 위해서는 두 숫자의 위치를 바꿔 붙여 나온 두 수를 비교하여, 더 큰 숫자가 나온 수의 앞 숫자가 앞으로 와야하는 점이었다.
때문에 sort를 해당 코드에 맞게 수정했고, 따라서 가장 큰 수가 나오는 순서대로 배열을 조절할 수 있었다.
또한 마지막에는 0이 나열된 문자열이 나올 수 있기 때문에, 첫 문자열이 0일 경우 나머지 문자열도 0이기 때문에 0을 return하고 아닐 경우 answer을 return하도록 했다.

문자열로 변환

문제

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

풀이

function solution(n) {
    return String(n);
}

너무 간단한 문제이기에 따로 설명을 덧붙이진 않겠다.

문자열을 정수로 변환하기

문제

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

풀이

function solution(n_str) {
    return Number(n_str);
}

이 역시 간단한 문제였다.

뒤에서 5등 위로

문제

정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

풀이

function solution(num_list) {
  num_list.sort((a, b) => a - b).splice(0, 5);
  return num_list;
}

먼저 오름차순으로 num_list를 정렬하고 splice를 통해 작은 5개의 수를 배열에서 제외시켰다. 그렇게 변경된 num_list를 return하여 문제를 해결했다.

profile
웹 프론트엔드 개발자

0개의 댓글