본문 바로가기
알고리즘/Programmers

[TIL] 2023.03.15 Programmers 문제 풀기

by heereal 2023. 3. 15.

Today I Learend

  • Programmers 문제 풀기
  • 이력서 작성

 


Programmers 문제 풀기

정수 제곱근 판별

나의 풀이

function solution(n) {
    return Math.sqrt(n) % 1 === 0 ? (Math.sqrt(n) + 1) ** 2 : -1
}

이 문제 풀면서 제곱근 관련 메서드나 연산자를 배울 수 있었다.

 

 

숫자가 정수인지 판별하기

 

console.log(3 ** 4);
// Expected output: 81
  • 거듭제곱 연산자: **

 

나머지가 1이 되는 수 찾기

나의 풀이

function solution(n) {
    for ( i = 1; i < n; i++ ) {
        if ( n % i === 1 ) {
            return i;
        }
    }
}

 

하샤드 수

나의 풀이

function solution(x) {
    let answer = 0;
    x.toString().split("").forEach((num) => answer += parseInt(num));
    return x % answer === 0 ? true : false;
}

 

다른 사람의 풀이

function Harshad(n){
  return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}

내 풀이랑 비슷한데 not 연산자 활용해서 return문 한 줄로 끝낼 수 있다. 그리고 forEach문 말고 reduce도 가능함! (사실 reduce 시도해 봤다가 이유는 모르겠지만 실패했다..) 또 하나 알게 된 점, 굳이 true, false를 삼항으로 적어줄 필요가 없었다..!

 

function solution(x) {
    return x % x.toString().split("").reduce((acc, cur) => parseInt(acc) + parseInt(cur), 0) === 0;
}

다른 사람 풀이보고 수정해 본 내 답변.

 

 

두 정수 사이의 합

나의 풀이

function solution(a, b) {
    let answer = 0;
    if ( a > b ) {
        for ( i = b; i <= a; i ++) {
        answer += i
        }
    } else {
        for ( i = a; i <= b; i ++) {
        answer += i
        }
    }
    return answer;
}

it문으로 처리하기... 정말 이게 최선의 방법일까? 아마 다른 사람들 답변 보면 for문 말고 다른 방식으로 처리할 수도 있을 거 같다.

 

다른 사람의 풀이

function adder(a, b, s = 0){
  for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
  return s;
}

for문 돌리는데 조건을 다르게 주어서 else문으로 예외 처리할 필요가 없어졌다. a, b 중에 더 작은 값을 초기화구문에 넣고 큰 값을 조건문에 넣는다! 대박... 간단한 건데 이 생각을 못했네🫠

  • Math.min() 함수는 주어진 숫자들 중 가장 작은 값을 반환합니다.
  • Math.max() 함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환합니다.

 


회고

이력서 너무 쓰기 싫어서 프로그래머스 문제 엄청 풀었다. 갑자기 간절하게 코드 짜고 싶어지고 알고리즘 푸는 게 너무 재밌다...! 진짜 이력서, 자소서 이런 거 제일 싫다 너무 재미없어🫠

섬네일용

 

 

댓글