๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

1561 - ๋†€์ด ๊ณต์›

๋ฌธ์ œ: boj.kr/1561
๋‚ ์งœ: 9์›” 8์ผ (์ผ)
์„ฑ๊ณต์—ฌ๋ถ€: X [01:30:34]


์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ์ด๋‹ค.

N์ด 20์–ต์ด๊ณ  M์ด 1๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ„์— ์•„์ด๋“ค์„ M๊ฐœ์˜ ๋†€์ด๊ธฐ๊ตฌ์— ํƒœ์šฐ๊ณ  1๋ถ„๋งˆ๋‹ค ํ•œ ๋ช…์”ฉ ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ํƒœ์›Œ์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š”๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์‹œ๊ฐ„์„ ์ด์šฉํ•ด ์ด๋ถ„ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋ชจ๋‘๋ฅผ ํƒœ์šฐ๋Š” ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์•ฝ 31๋ฒˆ๋งŒ์— ๋” ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ์ƒ๊ฐํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฐพ์•„์„œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ํ•ด์„ค์„ ๋ดค๋‹ค.

22 5
1 2 3 4 5



22๋ช…์„ ํƒœ์šฐ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด 22๋ช…์ด ๋ชจ๋‘ ํƒ€๋Š” ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์ฐพ๋Š”๋‹ค. ์ด ์‹œ๊ฐ„์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ 0๋ถ„์— M(5)๋ช…์„ ์ผ๋‹จ ํƒœ์šฐ๊ณ  0~30*n๊นŒ์ง€ ์ด๋ถ„ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ mid๊ฐ’์— ๊ฐ ๋†€์ด๊ธฐ๊ตฌ์˜ ์‹œ๊ฐ„์„ ๋‚˜๋ˆˆ ๋ชซ์„ ๋”ํ•ด์„œ ใ…ก์ด ๋ถ€๋ถ„์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ๋งŒ์•ฝ ๋†€์ด๊ธฐ๊ตฌ๊ฐ€ ์šดํ–‰์‹œ๊ฐ„์ด 3๋ถ„์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ „์ฒด 6๋ถ„๋™์•ˆ์€ 2๋ช…์„ ํƒœ์šธ ์ˆ˜ ์žˆ๊ณ  9๋ถ„๋™์•ˆ์€ 3๋ช…์„ ํƒœ์šธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ชซ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.ใ…ก M(5) + ๋ชซ์˜ ์ „์ฒด ํ•ฉ์ด n๋ช…๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์‹œ๊ฐ„์„ ๋” ์ค„์—ฌ๋ณด๊ณ , n(22)๋ช…๋ณด๋‹ค ์ž‘์œผ๋ฉด ํ•ด๋‹น ์‹œ๊ฐ„์—๋Š” n(22)๋ช…์ด ๋‹ค ๋ชปํƒ€๋Š” ๊ฒƒ์ด๋‹ˆ ์‹œ๊ฐ„์„ ๋” ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ์ตœ์ ์˜ ์‹œ๊ฐ„์„ ์ฐพ์•„๋ณธ๋‹ค.

์œ„ ์˜ˆ์ œ์—์„œ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋ณด๋ฉด 22๋ช…์˜ ๊ฒฝ์šฐ 8๋ถ„์ด ๋‚˜์˜จ๋‹ค.

8 / 1 = 8
8 / 2 = 4
8 / 3 = 2
8 / 4 = 2
8 / 5 = 1
= 17 + 5 = 22



๊ทธ๋Ÿผ 8๋ถ„์—์„œ ๋ชจ๋‘ ๋‹ค ํƒˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ ํ•ด๋‹น ์‹œ๊ฐ„์˜ 1๋ถ„ ์ „ ์ƒํ™ฉ์„ ๊ตฌํ•ด์„œ ํƒ€๊ณ ์žˆ๋Š” ์ธ์›์„ ๊ตฌํ•œ๋‹ค์Œ 8๋ถ„์˜ ์ƒํ™ฉ์—์„œ ํƒˆ ์ˆ˜ ์žˆ๋Š” ๋†€์ด๊ธฐ๊ตฌ์— ๋‚จ์€ ์ธ์›์„ ํƒœ์›Œ๋ณด๋ฉด ๋งˆ์ง€๋ง‰์œผ๋กœ ํƒ€๋Š” ์ธ์›์˜ ๋†€์ด๊ธฐ๊ตฌ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    // ์‹œ๊ฐ„์ œํ•œ 2์ดˆ, ๋ฉ”๋ชจ๋ฆฌ์ œํ•œ 128MB

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        long[] play = new long[m];
        for (int i = 0; i < m; i++) play[i] = Integer.parseInt(st.nextToken());

        if (n <= m) System.out.println(n);
        else {

            long low = 0;
            long high = 30L * n + 1;

            while (low + 1 < high) {
                long mid = (low + high) / 2;

                long cnt = m;
                for (int i = 0; i < m; i++)
                    cnt += (mid / play[i]);

                if (cnt >= n) high = mid;
                else low = mid;
            }

            long ret = m;
            for (int i = 0; i < m; i++)
                ret += (low / play[i]);

            for (int i = 0; i < m; i++) {
                if (high % play[i] == 0) ret++;
                if (ret == n) {
                    System.out.println(i+1);
                    break;
                }
            }
        }
    }
}