
1부터 까지의 숫자 중 좋은 숫자(Good Integer)의 개수를 구하는 문제입니다.
어떤 숫자를 180도 회전시켰을 때:
1. 모든 자릿수가 여전히 유효한 숫자로 바뀌어야 합니다. (3, 4, 7이 포함되면 유효하지 않음)
2. 회전한 결과가 원래 숫자와 다른 값이 되어야 합니다.
숫자별 180도 회전 결과는 다음과 같습니다.
0, 1, 82 5, 6 93, 4, 7 (포함 시 무조건 탈락)따라서 좋은 숫자가 되려면:
3, 4, 7을 단 하나도 포함하지 않아야 함2, 5, 6, 9 중 적어도 하나 이상을 포함하여 회전 후 값이 바뀌어야 함1부터 n까지 모든 숫자를 순회합니다.3, 4, 7이 포함되어 있다면 바로 다음 숫자로 넘어갑니다 (continue).switch 문을 사용하여 180도 회전시킨 새로운 문자 배열을 생성합니다.valids)를 1 증가시킵니다.function rotatedDigits(n: number): number {
let valids = 0;
for (let i = 1; i <= n; i++) {
const arr = [...String(i)];
// 3, 4, 7이 하나라도 들어가면 회전 후 올바른 숫자가 되지 않음
if (arr.includes('3') || arr.includes('4') || arr.includes('7')) continue;
// 각 자릿수를 180도 회전
for (let j = 0; j < arr.length; j++) {
switch (arr[j]) {
case '2':
arr[j] = '5';
break;
case '5':
arr[j] = '2';
break;
case '6':
arr[j] = '9';
break;
case '9':
arr[j] = '6';
break;
}
}
const rotated = Number(arr.join(''));
// 회전된 숫자가 원래 숫자와 다르면 좋은 숫자
if (i !== rotated) valids++;
}
return valids;
};