[Day7] 알고리즘

TheJang·2021년 2월 3일
0

알고리즘

목록 보기
7/10
post-thumbnail

하샤드 수

문제1

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

문제 풀이

  1. 주어진 x값을 문자열로 변환 toString() 대신 + "" 로 문자열을 처리함
  2. 배열 메소드를 사용하기 위해 split()로 배열로 변경해줌
  3. 여러개의 요소를 더해 한개의 값을 도출하기 위해 reduce() 를 사용
  4. 각 요소들을 숫자로 만들어 더 해주어야하기 때문에 각 요소를 숫자로 바꿔준다. Number() , ParseInt(), + 중에 +를 사용하여 문자열을 숫자로 형 변환
  5. 마지막 조건문으로 처리
function solution(x) {
    let number = (x + "").split("").reduce((acc,val) => +((+acc) + (+val)));

    if(x % number === 0){
        return true;
    }
    return false;
}

문제2

2016년

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

function solution(a, b) {
    const date = new Date(`${a},${b},2016`);
    let day= (date+"").split(' ');
    return day[0].toUpperCase()
}
function solution(a, b) {
    let date = new Date(`2016, ${a} ${b}`);
    let arr = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
    return arr[date.getDay()]
}

배운 점

  • Date() 메소드
  • Date.getDay() getDay() 메서드는 주어진 날짜의 현지 시간 기준 요일을 반환합니다
  • Date.getDate() getDate() 메서드는 주어진 날짜의 현지 시간 기준 일

레퍼런스

문제3

직사각형 별 찍기

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

문제 풀이

  1. 입력 된 값을 배열로 만들어주기 위해 Array().fill() 메소드 사용
  2. 2차원 배열로 만들어주어 각 요소를 * 로 채워주기 위해 한번 더 사용
  3. 배열을 순회하고 join()메소드를 두번 사용하여 2차원 배열을 문자열로 바꿔줌

풀이1

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    let arr = Array(b).fill(Array(a).fill("*"));
    console.log(arr.map((el)=>el.join("")).join("\n"))
});

다른 사람 풀이

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    const row = '*'.repeat(a)
    for(let i =0; i < b; i++){
        console.log(row)
    }

});

배운 점

문제4

정수 제곱근 판별

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

풀이1

function solution(n) {
    let number = Math.sqrt(n);
    
    if(!Number.isInteger(number)){
        return -1;
    }
    
    return Math.pow(number + 1, 2);
}

풀이2

function solution(n) {
  return Number.isInteger(Math.sqrt(n)) ? Math.pow(Math.sqrt(n) + 1 ,2) : -1 
}

다른 사람 풀이

function nextSqaure(n){
  switch(n % Math.sqrt(n)){
    case 0:
      return Math.pow(Math.sqrt(n) + 1, 2);
    default:
      return -1
  }
}

배운점

  • Math.sqrt() 메소드 : 루트를 씌워 해당 값을 반환
  • Math.pow() 메소드 : 해당 값을 제곱
  • Number.isInteger() 메소드 : 정수인지 판별 , 소수점인지 판별할때 유용

문제5

최대공약수와 최소공배수

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

function solution(a, b) {
    var answer = [];
    var minNum = Math.min(a, b);
    var maxNum = Math.max(a, b);
    answer.push(gcd(minNum, maxNum))
    answer.push(lcm(minNum, maxNum))
    return answer;
}
// 최대공약수
function gcd(minNum, maxNum){
  return (minNum % maxNum) === 0 ? maxNum : gcd(maxNum, minNum % maxNum);
}
// 최소공배수
function lcm(minNum, maxNum){
  return minNum * maxNum / gcd(minNum, maxNum);
}
profile
어제보다 오늘 더 노력하는 프론트엔드 개발자

0개의 댓글