이런저런 IT 이야기

Programming Challenges #34 본문

Algorithm

Programming Challenges #34

이런저런 IT 이야기 2023. 5. 24. 14:04
반응형

 

문제 : 일단 어떤수를 받아서 그 수를 뒤집은 다음 뒤집어진 수를 원래의 수에 더하는 과정 뒤집에서 더하기라고 부르자. 그 합이 회문(palindrome, 앞뒤 어느 쪽에서 읽어도 같은 말이 되는 어구. 예) eye, madam, etc….)이 아니면 회문이 될 때가지 이 과정을 반복한다. 예를 들어 처음에 195에서 시작해서 다음과 같이 네 번 뒤집어서 더하기를 반복하면 9,339라는 회문이 만들어진다.

대부분의 정수는 방법을 단계만 반복하면 회문이 된다. 하지만 예외도 있다. 회문을 찾을 없는 것으로 밝혀진 첫번째 수는 196이다. 하지만 회문이 없다는 것이 증명된적이 없다. 어떤 수가 주어졌을때 회문이 있으면 출력하고, 회문을 찾기까지 뒤집어서 더하기를 반복하는 회수를 출력하는 프로그램을 만들어라. 테스트 데이터로 쓰이는 수는 모두 뒤집어서 더하기를 1,000 미만반복해서 회문을 찾을수 있는 수고, 그렇게 만들어진 회문은 4,294,967,295보다 크지 않다고 가정한다.

 

const MAX_REPLACEMENTS = 1000;
let totalReplacements = 0;
let input = '3
195
265
750' // 입력값

function calculatePalindrome(arg) {
    if (isPalindrome(arg)) {
        return arg
    } else {
        totalReplacements++
        if (totalReplacements > MAX_REPLACEMENTS) {
            return null
        }
        return calculatePalindrome(arg+reverseValue(arg))
    }
}

function reverseValue(arg) {
    const reversValue = parseInt(String(arg).split('').reverse().join(',').replace(/,/gi, ""))            
    return reversValue
}

function isPalindrome(arg){
    if (arg == reverseValue(arg)) {
        return true
    } else {
        return false
    }
}

function main(arg) {
    let array = arg.split('\n');
    array = array.map(e => {
        totalReplacements = 0
        let palindrome = calculatePalindrome(parseInt(e))
        return [totalReplacements, palindrome]
    }).filter(e => e[0] > 0 )
    console.log(JSON.stringify(array))
}

main(input)

 

설명:

이 코드는 주어진 숫자들을 팰린드롬 수로 만들기 위해 숫자와 그 뒤집은 값을 반복해서 더하는 과정을 수행합니다. 코드의 구성요소는 다음과 같습니다:

- `MAX_REPLACEMENTS`: 최대 교체 횟수를 정의하는 상수입니다.
- `totalReplacements`: 현재까지 수행한 총 교체 횟수를 저장하는 변수입니다.
- `input`: 입력으로 사용할 숫자들을 담고 있는 문자열입니다.
- `calculatePalindrome`: 주어진 숫자를 팰린드롬 수로 만들기 위해 더해야하는 교체 횟수를 계산하는 함수입니다. 주어진 숫자가 팰린드롬인지 확인하고, 아닌 경우 교체 횟수를 증가시키며 숫자와 그 뒤집은 값을 더합니다. 최대 교체 횟수를 초과할 경우 `null`을 반환합니다.
- `reverseValue`: 주어진 숫자를 뒤집은 값을 계산하는 함수입니다. 숫자를 문자열로 변환한 뒤, 문자열을 뒤집고 다시 숫자로 변환하여 반환합니다.
- `isPalindrome`: 주어진 숫자가 팰린드롬인지 확인하는 함수입니다. 주어진 숫자와 그 뒤집은 값을 비교하여 같으면 `true`, 다르면 `false`를 반환합니다.
- `main`: 입력값을 처리하고 각 숫자에 대해 팰린드롬 수로 만들기 위해 수행한 교체 횟수와 결과 숫자를 출력하는 함수입니다. 입력값을 줄바꿈으로 분리하고, 각 숫자에 대해 `totalReplacements`를 초기화한 뒤 `calculatePalindrome` 함수를 호출하여 교체 횟수와 결과 숫자를 계산합니다. 교체 횟수가 0보다 큰 경우만 결과에 포함시킵니다.

이 코드는 각 숫자에 대해 팰린드롬 수로 만들기 위해 교체 횟수를 계산하고 결과를 출력하는 기능을 수행합니다.

반응형