algorithm,

알고리즘 풀이

FreeVue FreeVue Follow Apr 23, 2019 · 2 mins read
알고리즘 풀이
Share this

문제

앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를
대칭수(palindrome)라고 부릅니다.

n자리 수를 곱해 만들 수 있는 가장 큰 대칭수는?

input: n = 2
ouput: 9009 // 91 × 99 = 9009

풀이

// 대칭수 구하기
const output = (input) => {
  const max = (val = 9) => (`${val}`.length !== input ? max(parseFloat(`${val}9`)) : val) // n 자리 수의 최대값
  const min = (val = 9) => (`${val}`.length !== input ? min(val * 10) : val) // n 자리 수의 최소값 (최대값을 구하기 떄문에 앞자리를 9로 두었습니다.)

  // 최종 대칭수를 담을 변수
  // 1자리의 수로 설정을 했을 경우 9가 되대값이 됩니다.
  let out = 9

  // n자리 수의 두 수를 구하는 반복문
  for (let i = min(); i <= max(); i++) {
    for (let l = min(); l <= max(); l++) {
      // 두 수의 곱과 곱의 결과를 뒤집은 수 비교
      // Javascript의 type Number는 String의 메소드를 사용할 수 없어 String으로 작성하여 비교합니다.
      if (
        `${i * l}` ===
        `${i * l}`
          .split('')
          .reverse()
          .join('')
      ) {
        out = i * l
      }
    }
  }

  // 대칭수 출력
  return out
}

output(1) // 9
output(2) // 9009
output(3) // 906609

[출처: http://euler.synap.co.kr/prob_detail.php?id=4]