코딩테스트 #16 그리디 알고리즘 풀어보기

banhogu·2023년 10월 27일
0

문제

처음 내가 생각한 코드

const input = require('fs').readFileSync('index.txt').toString().trim().split(' ');

let N = Number(input[0]) //공
let K = Number(input[1]) //바구니
let result
let num = N / K //몫
let arr = new Array(K).fill(num)
let sum


for (let i = 1; i <= K; i++) {
    sum += i
}

if (sum > num) {
    result = -1
    console.log(result)
}

if (K % 2 !== 0) {
    let middle = parseInt(K / 2)
    let arr2 = []
    let j = -1
    let k = 1
    for (let i = middle - 1; i >= 0; i--, j--) {
        arr2.push(arr[i] + j)
    }
    for (let z = middle + 1; z <= arr.length - 1; z++, k++) {
        arr2.push(arr[z] + k)
    }
    arr2.sort((a, b) => a - b)

    if (arr2.includes(0)) {
        result = -1
    }
    else {
        result = arr2[arr2.length - 1] - arr2[0]
    }
}
if (K % 2 == 0) {
    let middle = parseInt(K / 2) - 1
    let arr2 = []
    let j = -1
    let k = 1
    for (let i = middle; i >= 0; i--, j--) {
        arr2.push(arr[i] + j)
    }
    for (let z = middle + 1; z <= arr.length - 1; z++, k++) {
        arr2.push(arr[z] + k)
    }
    arr2.sort((a, b) => a - b)
    if (arr2.includes(0)) {
        result = -1
    }
    else {
        result = arr2[arr2.length - 1] - arr2[0]
    }
}

console.log(result)

하지만 예시를 잘못생각해서 n=8 k=3일때 저 코드는 맞지 않는다.
그래서 로직을 코드로 구현하는것이 아닌, 일단 로직을 짜놓은 상태라고 하고 결과값 출력 방식에 대한 반복이 있을시 그 결과값을 출력할 수 있도록 해야겠다.
그래서

이런식으로 코드를 짜면 된다.

굳이 로직을 짜려고 시도하지 말고 일단 로직을 짜고 결과값도 반환해서 규칙을 찾아보자.


문제

접근법 : 회문인지 데이터를 넣어 확인하는 함수를 만들었고, 초기값이 회문이 아닐시 오른쪽꺼 하나씩 지워보고, 왼쪽씩 하나씩 지워본 문자열을 회문인지 체크한다.

해결법 : slice부분이 좀 힘들었는데, 한글자만 지워야 하니까 0부터 해당글자 전까지 남겨두고, 해당글자+1부터 뒤에 쭉 더한 문자열을 체크함수에 넣어줬다.


profile
@banhogu

0개의 댓글