์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€-35289] ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์นด๋“œ

alswlfl 2026. 4. 14. 12:21

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

 

๋ฌธ์ œ

A B C D E F
( (( ) )) () )(

 

์—ฌ์„ฏ ์ข…๋ฅ˜์˜ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์นด๋“œ๋ฅผ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ๋‚˜์—ดํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ(๋ชจ๋“  ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” X)

๋‹จ, ์นด๋“œ๋Š” ๋’ค์ง‘๊ฑฐ๋‚˜ ํšŒ์ „ํ•  ์ˆ˜ ์—†๊ณ , ์นด๋“œ์— ์ ํžŒ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

 

ํ’€์ด ๋ฐฉ์‹

์ฒ˜์Œ์— ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด์–ด์„œ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•จ. ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์˜ ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•จ.

 

  • E ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ ()๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ๋ณ„๋„๋กœ ์„ธ์–ด์คŒ
  • F ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ )(๋Š” ์œ„์น˜๊ฐ€ ๊ฐ€์šด๋ฐ์— ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•จ(ex: AFC, BFC, BFFFFC ๋“ฑ). ๊ฐ€์žฅ ๊ธด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ ‘๊ทผ
    • B+F๊ธธ์ด+D → (( )()(...)( ))
    • A+F๊ธธ์ด+C → ( )()(...)( )
    • B+F๊ธธ์ด+CC → (( )()(...)( ))
    • AA+F๊ธธ์ด+D → (( )()(...)( ))
  • B ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ((๋Š” ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์™€์ฃผ์–ด์•ผ ํ•จ(ex: BD, BCC ๋“ฑ)
    • B+D → (( ... ))
      ์—ฌ๊ธฐ์„œ B์™€ D ์ค‘ ๊ฐœ์ˆ˜๊ฐ€ ๋” ์ ์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ƒ์„ฑ
    • ๋งŒ์•ฝ B>D์ธ ๊ฒฝ์šฐ, ๋‚จ๋Š” B๋Š” C์™€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ๊ณ ๋ ค B+CC → (( ... ))
      ์ด ๋ถ€๋ถ„๋„ B์™€ CC ์ค‘ ๊ฐœ์ˆ˜๊ฐ€ ๋” ์ ์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ƒ์„ฑ
  • D ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ))๋Š” A ๊ด„ํ˜ธ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ๋ž‘ ๋งค์นญ๋  ์ˆ˜ ์žˆ์Œ
    • AA+D → (( ... ))
  • ๋‚จ์€ A ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์€ ๋‚จ์€ C๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
    • A+C (( ... ))

์ฝ”๋“œ

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

// A: (, B: ((, C: ), D: )), E: (), F: )(
let [A, B, C, D, E, F] = input[0].split(' ').map(Number);

let answer = 0;
// E๋Š” ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž„
if (E > 0) {
    answer += E * 2;
    E = 0;
}
// F๊ฐ€ ์กด์žฌํ•  ๋•Œ
if (F > 0) {
    // (()()()()(...)())
    if (B > 0 && D > 0) {
        answer += F * 2 + 4;
        B--;
        D--;
    }
    // ()(...)()
    else if (A > 0 && C > 0) {
        answer += F * 2 + 2;
        A--;
        C--;
    }
    // (()(...)())
    else if (A >= 2 && D > 0) {
        answer += F * 2 + 4;
        A -= 2;
        D--;
    }
    // (()(...)())
    else if (B > 0 && C >= 2) {
        answer += F * 2 + 4;
        B--;
        C -= 2;
    }
}

// B๊ฐ€ ์กด์žฌํ•  ๋•Œ
if (B > 0) {
    if (D > 0) {
        const min = Math.min(B, D);
        answer += min * 2 * 2;
        B -= min;
        D -= min;
    }
    if (B > 0 && C >= 2) {
        const min = Math.min(B, Math.floor(C / 2));
        answer += min * 2 * 2;
        B -= min;
        C -= 2 * min;
    }
}

// D๊ฐ€ ์กด์žฌํ•  ๋•Œ
if (D > 0) {
    if (A >= 2) {
        const min = Math.min(D, Math.floor(A / 2));
        answer += min * 2 * 2;
        A -= 2 * min;
    }
}

// A๊ฐ€ ์กด์žฌํ•  ๋•Œ
if (A > 0) {
    if (C > 0) {
        const min = Math.min(A, C);
        answer += min * 2;
    }
}

console.log(answer);