코딩테스트/Javascript
[프로그래머스] Lv0 저주의 숫자3
HangJu_95
2023. 11. 1. 14:56
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120871
문제 설명
내 풀이
function solution(n) {
// 1. answer = 1로 설정
let answer = 1
// 2. 정수 n만큼 반복문 실행
for (i = 1;i < n; i++){
// 2-1 반복문을 돌리때마다 숫자 1을 추가
answer++
// 2-2 math 함수 실행
answer = math3(answer)
}
return answer
}
function math3(answer) {
// 3으로 나뉘어지거나, 3이 포함되어 있는 경우
if (answer % 3 == 0 || String(answer).includes('3')){
// 숫자를 증가시키고
answer ++
// 다시 한번 재귀함수 DP 실행
return math3(answer)
} else {
// 그렇지 않다면 return
return answer
}
}
다른 사람의 풀이
function solution(n) {
return [...Array(n * 3)]
.map((_, i) => i + 1)
.filter((num) => num % 3 !== 0 && !num.toString().includes("3"))[n - 1];
}
먼저 3n 만큼의 배열을 먼저 생성
map을 통해 배열 안 인자를 정렬하고,
filter를 통해 저주의 숫자 3을 제거한 뒤, n에 해당하는 숫자를 출력
오늘 배운 점
- DP를 사용하는 알고리즘이지만, 다른 방법도 있다는 것을 알았다.
- 하지만 method를 많이 사용하는 방법이므로, 효율성 테스트에서 통과하지 못할 것 같다.