[2292] λ²Œμ§‘ honeycomb

πŸ’‘
μˆ˜ν•™, 211011
notion image

문제

notion image
μœ„μ˜ κ·Έλ¦Όκ³Ό 같이 μœ‘κ°ν˜•μœΌλ‘œ 이루어진 λ²Œμ§‘μ΄ μžˆλ‹€. κ·Έλ¦Όμ—μ„œ λ³΄λŠ” 바와 같이 μ€‘μ•™μ˜ λ°© 1λΆ€ν„° μ‹œμž‘ν•΄μ„œ μ΄μ›ƒν•˜λŠ” 방에 λŒμ•„κ°€λ©΄μ„œ 1μ”© μ¦κ°€ν•˜λŠ” 번호λ₯Ό μ£Όμ†Œλ‘œ 맀길 수 μžˆλ‹€. 숫자 N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, λ²Œμ§‘μ˜ 쀑앙 1μ—μ„œ N번 λ°©κΉŒμ§€ μ΅œμ†Œ 개수의 방을 μ§€λ‚˜μ„œ 갈 λ•Œ λͺ‡ 개의 방을 μ§€λ‚˜κ°€λŠ”μ§€(μ‹œμž‘κ³Ό 끝을 ν¬ν•¨ν•˜μ—¬)λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 예λ₯Ό λ“€λ©΄, 13κΉŒμ§€λŠ” 3개, 58κΉŒμ§€λŠ” 5개λ₯Ό μ§€λ‚œλ‹€.

μž…λ ₯

첫째 쀄에 N(1 ≀ N ≀ 1,000,000,000)이 주어진닀.

좜λ ₯

μž…λ ₯으둜 주어진 λ°©κΉŒμ§€ μ΅œμ†Œ 개수의 방을 μ§€λ‚˜μ„œ 갈 λ•Œ λͺ‡ 개의 방을 μ§€λ‚˜λŠ”μ§€ 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1

13

예제 좜λ ₯ 1

3
Β 

My solution


1을 κΈ°μ€€μœΌλ‘œ κ°€μž₯ κ°€κΉŒμš΄ 방의 개수λ₯Ό μ„Έλ©΄ 6개, 2칸만큼 μ°¨μ΄λ‚˜λŠ” 방의 κ°œμˆ˜λŠ” 12개, 3칸만큼 μ°¨μ΄λ‚˜λŠ” 방의 κ°œμˆ˜κ°€ 18개, 4μΉΈ μ°¨μ΄λ‚˜λŠ” 방의 κ°œμˆ˜λŠ” 24κ°œλ‹€.
for문의 n=1으둜 μ‹œμž‘ν•΄μ„œ 1μ”© μ¦κ°€μ‹œν‚€λŠ”λ° 이 값을 방의 개수λ₯Ό λŠ˜λ¦¬λŠ” 데 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
방의 κ°œμˆ˜λŠ” 6에 nλ₯Ό κ³±ν•΄μ£Όλ©΄ 6 * 1(i), 6 * 2, 6 * 3,,, μ”© λ”ν•΄μ„œ λˆ„μ μ‹œν‚¬ 수 μžˆλ‹€. μž…λ ₯값이 방의 κ°œμˆ˜λ³΄λ‹€ κ°™κ±°λ‚˜ μž‘μ•„μ§€κ²Œ λ˜μ—ˆμ„ λ•Œ 방의 개수λ₯Ό μ¦κ°€μ‹œν‚¨ 만큼의 iλ₯Ό λ¦¬ν„΄ν•˜κ²Œ ν–ˆλ‹€.
Β 

μ†ŒμŠ€μ½”λ“œ

function solution(i) {
    const input = parseInt(i.toString().trim().split("\n"));
    let cnt = 1;
    let n = 1;
    while (true) {
        if (cnt >= input) {
            console.log(n.toString());
            break;
            // return n.toString();
        }
        cnt += 6 * n;
        n++;
    }
}

test("solution", () => {
    expect(solution("13")).toStrictEqual("3");
    expect(solution("58")).toStrictEqual("5");
    expect(solution("1")).toStrictEqual("1");
});