[프로그래머스] JS - 핸드폰 번호 가리기(Lv1), Jaden Case 문자열 만들기(Lv2), N개의 최소공배수(Lv2)

손규성·2022년 10월 6일
0

alogrithm

목록 보기
5/22
post-thumbnail

Lv. 1: 핸드폰 번호 가리기✍️


문제 설명

  • 전화번호가 문자열 (phone_number)로 주어졌을 때, 전화번호 뒷 4자리 제외한 나머지 숫자를 전부 *으로 가린 문자열 반환하기

제한 사항

  • 4phone_number20

나의 답안

function solution(phone_number) {
    let answer = '',
        arr = phone_number.split('');
    
    for(let i = 0; i < arr.length; i++) {
        if (i < (arr.length - 4)) answer += '*';
        else answer += arr[i];
    }
    
    return answer;
}
  • split('')을 통해 매개변수로 입력된 phone_number을 배열arr로 변환
  • 반복문을 통해 arr을 탐색하며 →
    - 마지막 4자리 전에는 i > arr.length - 4 answer*를 추가
    - 마지막 4자리 부터는 i ≤ arr.length - 4 문자열 값 그대로 추가

다른 사람 풀이

function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}


Lv. 2: Jaden Case 문자열 만들기✍️


문제 설명

  • Jaden Case란 모든 단어의 첫 문자가 대문자이며, 그 외의 모든 알파벳은 소문자인 문자열을 뜻함
  • 단, 단어의 첫 문자가 알파벳이 아닌 경우에는 이어지는 알파벳은 소문자로 써야 함
  • s라는 문자열이 입력되었을 때 Jaden Case 문자열을 리턴하는 함수 작성

제한 사항

  • 1s200
  • s는 알파벳과 숫자, 공백으로 이루어져 있음
  • 숫자는 단어의 첫 문자로만 나옴
  • 숫자로만 이루어진 단어는 없음
  • 공백문자가 연속해서 나올 수 있음

나의 답안

function solution(s) {
    let answer = '';
    
    for(let i = 0; i < s.length; i++) {
        if(i === 0 || s[i-1] === ' ') answer += s[i].toUpperCase();
        else answer += s[i].toLowerCase();
    }
    
    return answer;
}
  • 입력된 문자열 s를 반복문을 통해 탐색하며 →
    - 문자열의 첫 문자i === 0와 바로 직전 값이 공백인 경우 s[i - 1] === ' ' 해당 인덱스의 문자를 toUpperCase()를 통해 대문자로 반환해서 answer에 추가
    - 이외의 경우 다 소문자로 봐도 된다고 가정해서 toLowerCase()사용 후 answer에 추가


Lv. 2: N개의 최소공배수✍️


문제 설명

  • 최소공배수(Least Common Multiple)란 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미함
  • 마찬가지로 n개의 수의 최소공배수는 n개의 수들의 배수 중 공통이 되는 가장 작은 숫자를 의미함
  • n개의 숫자를 담은 배열arr이 입력되었을 때, 이들의 최소공배수를 반환하는 함수 작성

제한 사항

  • 1arr의 길이15
  • arr의 원소는 100 이하의 자연수

나의 답안

function solution(arr) {
  let max = Math.max(...arr),
      count = 0,
      x = 0;

  while(true){
    x += max;

    for(let i = 0; i < arr.length; i++) {
      if(x % arr[i] !== 0) break; 
      if(i === arr.length - 1 && x % arr[i] === 0) return x;
    }
  }
    
  return x;
}
  • 최소공배수는 결국 가장 큰 숫자의 배수 중 하나이기 때문에 arr중 가장 큰 숫자를 max에 선언
  • while-loop이 반복될 때마다 xmax값 더하기 (다음 배수 & Initial max값이 최소공배수일 수 있음)
  • for-loop 돌면서 xarr값 중 하나의 배수가 아니면 break → if(x % arr[i] !== 0) break;
  • xarr의 모든 숫자의 배수이면 현재 x값 반환 → if(i === arr.length - 1 && arr[i] === 0)
profile
블로그 이사 → https://sqsung.tistory.com/

0개의 댓글