코딩 테스트 in JS

프로그래머스 JS 코테 | 콜라츠 추측, 하샤드 수

바닷가쟤 2023. 9. 4. 22:09

lv.1에서 이름이 특이해서 눈여겨 봤던 문제들을 풀어봤다.

무튼... 전에 문제를 슬쩍 봤을 때 어려워 보였었는데 오늘 문제를 봤을 때 초큼 만만s 해 보여서 풀어봤다.

ㅎ 내 힘으로 풀었다고 한다. 재밌었다.

그냥 단순한 계산 문제가 아니고 스토리가 있으니까 더 재밌는 느낌?

마치 like 수학 익힘책에서 달력을 자꾸 찢는 그런 늒김인거지..


Lv. 1 콜라츠 추측

 

콜라츠 추측

https://school.programmers.co.kr/learn/courses/30/lessons/12943

 

첫 번째 시도 

function solution(num) {
    let s = num
    let answer = 0
    while(s === 1) {
        if(s % 2 === 0) {
            s = s / 2
            answer++
        } else {
            s = s * 3 + 1
            answer++
        }
    }
    return answer
}

웨.. 웨 안대지..??

 

수정

function solution(num) {
    let s = num
    let answer = 0
    while(true) {
        if(s % 2 === 0) {
            s = s / 2
            answer++
        } else {
            s = s * 3 + 1
            answer++
        }
        if(s === 1) break
    }
    return answer
}

while문을 true로 바꿔서 무한 루프를 만들어 줬고, s가 1이 되면 break로 끝내게 했다.

여기서 추가 해야 할 것은 500번 이상이 되면 -1을 반환하게 하기 !

if(500 <= answer) {
            answer = -1
            break
        }

이걸… 추가해줬다.. 두근두근

ㅋㅋㅋㅋㅋㅋ 뭔데… 뭐냐고……

으아악악ㅇ악 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

프로그래머스는 … 실행결과 테스트 케이스에 뭘 넣었는지 공개하시오…. 젭알요

뭘가지고 테스트 하셨는데요….

 

어라?

성공

function solution(num) {
    let s = num
    let answer = 0
    
    while(s != 1) {
        if(s % 2 === 0) {
            s = s / 2
            answer++
        } else {
            s = s * 3 + 1
            answer++
        }
    }
    
    return (answer >= 500) ? answer = -1 : answer
}

뭬야 통과함..!

while문 조건으로 s!= 1 추가함


 

Lv.1 하샤드 수

하샤드 수

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

 

(x + "")[n] 이걸 하면 x의 n번째(제로베이스드 넘버링) 숫자를 문자로 얻을 수 있다.

변수 index에 (x + "")[n] n = 0에서부터 x.length까지 다 더한 값을 할당하고,

x % index === 0 이면 true 아니면 false ..! 하면 되려나?

function solution(x) {
    let index = 0
    
    for(let i = 0;i < (x + "").length; i++) {
        index += (x + "")[i] * 1
    }
    return index
}

각 자리의 숫자를 더한 값 index 추출 완.

function solution(x) {
    let index = 0
    
    for(let i = 0;i < (x + "").length; i++) {
        index += (x + "")[i] * 1
    }
    
    if(x % index === 0) {
        return true
    } else {
        return false
    }
}

바로 그냥 통과

(호우)

(x % index === 0) ? true : false

이렇게 하면 undefiend 나와서 고민했는데 조건 앞에 return 붙여줘야 함!

return (x % index === 0) ? true : false

통과쓰

728x90