๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 3020๋ฒˆ: ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 3020๋ฒˆ: ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ - C++

.23 2022. 2. 9. 17:55
๋ฌธ์ œ

๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ์žฅ์• ๋ฌผ(์„์ˆœ๊ณผ ์ข…์œ ์„)๋กœ ๊ฐ€๋“์ฐฌ ๋™๊ตด์— ๋“ค์–ด๊ฐ”๋‹ค. ๋™๊ตด์˜ ๊ธธ์ด๋Š” N๋ฏธํ„ฐ์ด๊ณ , ๋†’์ด๋Š” H๋ฏธํ„ฐ์ด๋‹ค. (N์€ ์ง์ˆ˜) ์ฒซ ๋ฒˆ์งธ ์žฅ์• ๋ฌผ์€ ํ•ญ์ƒ ์„์ˆœ์ด๊ณ , ๊ทธ ๋‹ค์Œ์—๋Š” ์ข…์œ ์„๊ณผ ์„์ˆœ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋“ฑ์žฅํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ๊ธธ์ด๊ฐ€ 14๋ฏธํ„ฐ์ด๊ณ  ๋†’์ด๊ฐ€ 5๋ฏธํ„ฐ์ธ ๋™๊ตด์ด๋‹ค. (์˜ˆ์ œ ๊ทธ๋ฆผ)

์ด ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๋Š” ์žฅ์• ๋ฌผ์„ ํ”ผํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž์‹ ์ด ์ง€๋‚˜๊ฐˆ ๊ตฌ๊ฐ„์„ ์ •ํ•œ ๋‹ค์Œ ์ผ์ง์„ ์œผ๋กœ ์ง€๋‚˜๊ฐ€๋ฉด์„œ ๋งŒ๋‚˜๋Š” ๋ชจ๋“  ์žฅ์• ๋ฌผ์„ ํŒŒ๊ดดํ•œ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ 4๋ฒˆ์งธ ๊ตฌ๊ฐ„์œผ๋กœ ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค๋ฉด ํŒŒ๊ดดํ•ด์•ผํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ˆ˜๋Š” ์ด ์—ฌ๋Ÿ๊ฐœ์ด๋‹ค. (4๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ ๊ธธ์ด๊ฐ€ 3์ธ ์„์ˆœ๊ณผ ๊ธธ์ด๊ฐ€ 4์ธ ์„์ˆœ์˜ ์ค‘๊ฐ„์ง€์ ์„ ๋งํ•œ๋‹ค)

ํ•˜์ง€๋งŒ, ์ฒซ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์ด๋‚˜ ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์œผ๋กœ ๋‚ ์•„๊ฐ„๋‹ค๋ฉด ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๋Š” ์žฅ์• ๋ฌผ ์ผ๊ณฑ๊ฐœ๋งŒ ํŒŒ๊ดดํ•˜๋ฉด ๋œ๋‹ค.

๋™๊ตด์˜ ํฌ๊ธฐ์™€ ๋†’์ด, ๋ชจ๋“  ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ํŒŒ๊ดดํ•ด์•ผํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๊ฐ„์ด ์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ ํ•ญ์ƒ ์ง์ˆ˜์ด๋‹ค. (2 ≤ N ≤ 200,000, 2 ≤ H ≤ 500,000)

๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๋Š” H๋ณด๋‹ค ์ž‘์€ ์–‘์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ํŒŒ๊ดดํ•ด์•ผ ํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๊ฐ„์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


 

์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š”๋ฐ, ๊ทธ ๋ฐฉ๋ฒ•์€ ๋ชจ๋ฅด๊ฒ ๊ณ  ๋‚˜๋Š” ๋ˆ„์ ํ•ฉ์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

 

๋†’์ด๊ฐ€ n์ธ ๊ตฌ๊ฐ„์—์„œ ๋ถ€๋”ชํžˆ๋Š” ์„์ˆœ/์ข…์œ ์„์˜ ์ˆ˜๋Š” ๋†’์ด๊ฐ€ (n + 1)์ธ ๊ตฌ๊ฐ„์—์„œ ๋ถ€๋”ชํžˆ๋Š” ์„์ˆœ/์ข…์œ ์„์˜ ์ˆ˜ + ๊ธธ์ด๊ฐ€ n์ธ ์„์ˆœ/์ข…์œ ์„์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ๊ตฌ๊ฐ„์—์„œ ๋ถ€๋”ชํžˆ๋Š” ์žฅ์• ๋ฌผ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค€ ๋’ค ์ด๋ฅผ ํ•ฉํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’๊ณผ ๋น„๊ตํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ
#include <cstdio>
#include <climits>

int main(void) {
    int N, H;
    scanf("%d %d", &N, &H);

    int *up = new int[H + 1];
    int *down = new int[H + 1];

    for(int i = 0; i <= H; i++) {
        up[i] = down[i] = 0;
    }

    for(int i = 0; i < N; i++) {
        int height;
        scanf("%d", &height);

        if(i % 2 == 0) down[height]++;
        else up[height]++;
    }

    for(int i = H - 1; i >= 0; i--) {
        up[i] += up[i + 1];
        down[i] += down[i + 1];
    }

    int min = INT_MAX, count = 0;
    for(int i = 1; i <= H; i++) {
        int obstacle = down[i] + up[H - i + 1];
        if(min > obstacle) {
            min = obstacle;
            count = 1;
        }
        else if(min == obstacle) count++;
    }

    printf("%d %d\n", min, count);

    delete[] up;
    delete[] down;
    return 0;
}
Comments