baekjoon - 골드바흐의 추측(9020)

ohbin Kwon·2022년 3월 27일
0

https://www.acmicpc.net/problem/9020

나의 풀이

const input = require('fs')
  .readFileSync(process.platform === 'linux' ? '/dev/stdin' : './ex.txt')
  .toString()
  .trim()
  .split('\n')
  .map( n =>  Number(n))
  input.shift()

  for(let num of input){
    let a,b;
    let bigPrime;
    let smallPrime;
    if(isPrime(num/2)){
      a = num/2
      b = num/2
    }else{
      bigPrime = makePrime(num/2)
      smallPrime = makeSmallPrime(bigPrime)
      let result = isMatching(bigPrime, smallPrime, num)
      a = result[0]
      b = result[1]
    }
    console.log(a + " " + b)
  }

  function isPrime(number){
    for(let a = 2; a<=Math.floor(Math.sqrt(number)); a++){
      if(number%a === 0){
        return false
      }
    }
    return true
  }

  function makePrime(number) {
    if(number % 2 === 0){
      number += 1
    }
    if(isPrime(number)){
      return number
    } else{
      number += 2
      return makePrime(number)
    }
  }

  function makeSmallPrime(primeNum){
    primeNum -= 2
    if(isPrime(primeNum)){
      return primeNum
    }else{
      return makeSmallPrime(primeNum)
    }
  }

  function makeBigPrime(primeNum){
    primeNum += 2
    if(isPrime(primeNum)){
      return primeNum
    }else{
      return makeBigPrime(primeNum)
    }
  }

  function isMatching(big, small, number) {
    if(big + small === number){
      return [ small, big ]
    }else if( big + small < number){
      big = makeBigPrime(big)
      return isMatching(big, small, number)
    }else if( big + small > number){
      small = makeSmallPrime(small)
      return isMatching(big, small, number)
    }
  }

메모리: 13512kb / 속도: 548ms / 엄청나게 삽질해서 풀었다.. 200ms는 어떻게 나오는걸까..?

다른 사람 풀이

profile
개발 로그

0개의 댓글