본문 바로가기

TIL(today i learned)/Projec Euler-수학문제풀이

[4일차] 세 자리 수 곱해 대칭수(palindrome) 구하기

4일차 문제

앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.
두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.
세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?

오늘 문제는 비교적 쉬웠고, 빨리 풀 수 있었다.

 

풀이 로직

  1. for loop을 이용해 900*900 ~ 999*999 값을 생성
  2. 각 값을 string으로 변환
  3. string 값을 .reverse().join("")을 활용해 거꾸로 뒤집은 숫자 string으로 변환
  4. string 값과 reverse string 값을 비교하여 같을 경우, array에 push함
  5. Math.max(...Array)를 이용해 최대값을 뽑아냄
let palindrome = [];


for(let i = 900; i <= 1000; i++){
    for (let j = 900; j <=1000; j++){
        let num = i*j;
        let num_s = num.toString();
        let num_reverse = [...num_s].reverse().join("");
        if (num_s === num_reverse){
            palindrome.push(num);
        }
    }
}
console.log(palindrome);
console.log(Math.max(...palindrome))