문제 출처
https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc
<합성수 찾기>
[문제 설명]
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
[제한사항]
1 ≤ n ≤ 100
[입출력 예]
n result
10 5
15 8
처음에 내가 푼 정답
function solution(n) {
let answer = 0;
for(let i = 4; i<=n; i++){
if(i % 2 === 0 || i % 3 === 0){
answer ++ ;
}
}
return answer;
}
합성수 즉 소수가 아닌 수를 찾는 문제이기 때문에
단순히 2나 3으로 나누어 떨어지면 모두 소수가 아니라고 생각했다
그래서 for 문도 2와 3을 제외하기 위해 i를 4부터 시작했다
하지만 내 정답은 틀렸다...ㅜㅜ
알고 보니 25나 49같이 2와 3으로 나누어 떨어지지 않지만 소수가 아닌 합성수인 경우가 있었다 🫢🫢
다시 푼 정답
function solution(n) {
let answer = 0
for(i=1; i<=n; i++) {
let cnt = 0
for(j=1; j<=i ; j++) {
if(i%j == 0) {
cnt += 1
}
}
if(cnt > 2) {
answer += 1
}
}
return answer
}
원래는 위의 코드에 25나 49인 케이스만 추가할까도 했는데 내가 생각하지 못한 수가 또 있을까봐
카운트를 세는 변수 cnt를 만들어서 i를 j로 나누었을 때 나누어 떨어지는 경우가 2보다 클 때 값을 출력하도록 하였다.
느낀점
이 문제를 풀고 다른 사람이 푼 풀이를 봤는데 제곱근을 반환하는 함수인 Math.sqrt()가 있다는 것을 첨 알게 되었다...!!
또한 문제를 한번에 풀 수 있을 줄 알았는데 한번에 풀지 못했다는 게 아쉬웠다 ㅠㅠ
<팩토리얼>
[문제 설명]
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
i! ≤ n
[제한사항]
0 < n ≤ 3,628,800
[입출력 예]
n result
3628800 10
7 3
정답
function solution(n) {
let fac = 1;
let i = 1;
while (fac <= n) {
fac *= i;
i++;
}
return i - 2;
}
이 문제는 n에 가장 가까운 수 i를 출력하는 문제이기 때문에 while 문을 사용해서
가장 가까운 수를 출력하고자 하였다.
이렇게 끝난 줄 알았는데 자꾸 틀리는 것이었다 콘솔로 출력해서 수 보니....
2 3 4 5 |
n이 7일 때 원하는 값은 3인데 i가 초과한다는 것을 알게 되었다
그래서 마지막에 -2를 해서 문제를 풀 수 있었다.
'자료구조 & 알고리즘 > 코딩테스트' 카테고리의 다른 글
[JavaScript/코딩테스트] 코테 입문 <잘라서 배열로 저장하기> (0) | 2024.03.26 |
---|---|
[JavaScript/코딩테스트] 코테 입문 <가장 큰 수 찾기> (0) | 2024.03.21 |
[JS 코딩테스트] 코테 입문 수학 "개미 군단" 풀기 (0) | 2024.03.07 |
[JS 코딩테스트] 코테 입문 배열 "옷가게 할인 받기" 풀기 (0) | 2024.03.02 |
[JS 코딩테스트] 코테 입문 "짝수는 싫어요" , "피자 나눠 먹기(1)" 풀기 (0) | 2024.02.27 |