[프로그래머스] 저주의 숫자 3

이강혁·2023년 9월 15일
0

프로그래머스

목록 보기
11/79
post-custom-banner

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

문제 설명

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

10진법	3x 마을에서 쓰는 숫자		10진법		3x 마을에서 쓰는 숫자
1		1						6			8
2		2						7			10
3		4						8			11
4		5						9			14
5		7						10			16

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 100

입출력 예

n	result
15	25
40	76

입출력 예 설명

  • 입출력 예 #1
    15를 3x 마을의 숫자로 변환하면 25입니다.

  • 입출력 예 #2
    40을 3x 마을의 숫자로 변환하면 76입니다.

코드

function solution(n) {
	var answer = [];

	for (let i=0;i<n;i++){
    	let tmp=answer[0]?answer[i-1]+1:1;
    	while(tmp!=check3(tmp)){
     	   tmp=check3(tmp);
    	}
    	answer.push(tmp);
	}
	return answer[answer.length-1];
}

function check3(number){

	if(number%3==0){
    	number++;
	}
	else if(number.toString().includes('3')){
    	number++;
	}

	return number;
}

n까지의 숫자를 다 계산해서 구했다.
기본적으로 answer[i] = answer[i-1]+1이고, answer[i-1]+1이 3의 배수인지, 아니면 3을 포함한느지는 check3 함수로 확인했다.

다른 풀이

function solution(n) {
  return [...Array(n * 3)]
  				.map((_, i) => i + 1)
				.filter((num) => num % 3 !== 0 && !num.toString().includes("3"))[n - 1];
}

n의 3배만큼 배열을 만든 다음에 1부터 n*3까지 숫자를 집어넣고 3의 배수이거나 3을 포함하는 숫자는 날렸다.
그러고 n번째 숫자를 뽑아서 반환.

profile
사용자불량
post-custom-banner

0개의 댓글