12018 : Yonsei TOTO

12018 : Yonsei TOTO#

supposed to be surdarla logo

Surdarla

Nov 28 Tue 09:21, 2023

1 min read

  • https://d2gd6pc034wcta.cloudfront.net/tier/8.svg ์‹ค๋ฒ„3

์‹œ๊ฐ„์ œํ•œ

๋ฉ”๋ชจ๋ฆฌ์ œํ•œ

์ •๋‹ต๋น„์œจ

1์ดˆ

128MB

34.7%

๋ฌธ์ œ#

์—ฐ์„ธ๋Œ€ํ•™๊ต ์ˆ˜๊ฐ•์‹ ์ฒญ์ด ์–ผ๋งˆ ์ „๋ถ€ํ„ฐ ๋ฐ”๋€Œ์–ด, ๋งˆ์ผ๋ฆฌ์ง€ ์ œ๋„๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. ์ด ์ œ๋„๋Š” ๊ฐ๊ฐ์˜ ํ•™์ƒ๋“ค์—๊ฒŒ ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ์ฃผ์–ด ๋“ฃ๊ณ  ์‹ถ์€ ๊ณผ๋ชฉ์— ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ๊ณผ๋ชฉ๋‹น 1~36์„ ๋ถ„๋ฐฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋‘ ๋ถ„๋ฐฐ๊ฐ€ ๋์ด ๋‚˜๋ฉด ๊ณผ๋ชฉ์— ๋Œ€ํ•ด์„œ ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ๋งŽ์ด ํˆฌ์žํ•œ ์ˆœ์œผ๋กœ ๊ทธ ๊ณผ๋ชฉ์˜ ์ˆ˜๊ฐ•์ธ์›๋งŒํผ ์‹ ์ฒญ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์„ฑ์ค€์ด๋Š” ์—ฐ์„ธ๋Œ€ํ•™๊ต ์žฌํ•™ ์ค‘์ธ ํ•™์ƒ์ด๋‹ค. ์„ฑ์ค€์ด๋Š” ์ €๋ฒˆ ์ˆ˜๊ฐ•์‹ ์ฒญ์—์„œ ์‹คํŒจํ•˜์—ฌ ํœดํ•™์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ์ˆ˜๊ฐ•์‹ ์ฒญ๋งŒ์€ ํ•„์‚ฌ์ ์œผ๋กœ ์„ฑ๊ณตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ์ค€์ด๋Š” ํ•™๊ต ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋šซ์–ด๋ฒ„๋ ธ๋‹ค.

๊ทธ ๋•๋ถ„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์‹ ์ฒญํ•œ ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์„ฑ์ค€์ด๋Š” ์ฃผ์–ด์ง„ ๋งˆ์ผ๋ฆฌ์ง€๋กœ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ณผ๋ชฉ์„ ์‹ ์ฒญํ•˜๊ณ  ์‹ถ์–ด ํ•œ๋‹ค. (๋‚ด๊ฐ€ ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ๋„ฃ๊ณ  ์ดํ›„์— ๊ณผ๋ชฉ์„ ์‹ ์ฒญํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†๋‹ค) ๋งˆ์ผ๋ฆฌ์ง€๋Š” ํ•œ ๊ณผ๋ชฉ์— 1์—์„œ 36๊นŒ์ง€ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

input#

์ฒซ์งธ ์ค„์—๋Š” ๊ณผ๋ชฉ ์ˆ˜ n (1 โ‰ค n โ‰ค 100)๊ณผ ์ฃผ์–ด์ง„ ๋งˆ์ผ๋ฆฌ์ง€ m (1 โ‰ค m โ‰ค 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๊ณผ๋ชฉ๋งˆ๋‹ค 2์ค„์˜ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋Š”๋ฐ ์ฒซ์งธ ์ค„์—๋Š” ๊ฐ ๊ณผ๋ชฉ์— ์‹ ์ฒญํ•œ ์‚ฌ๋žŒ ์ˆ˜ Pi๊ณผ ๊ณผ๋ชฉ์˜ ์ˆ˜๊ฐ•์ธ์› Li์ด ์ฃผ์–ด์ง€๊ณ  ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ๊ฐ ์‚ฌ๋žŒ์ด ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ์–ผ๋งˆ๋‚˜ ๋„ฃ์—ˆ๋Š”์ง€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค Pi โ‰ค100, 1 โ‰ค Li โ‰ค 100)

(๋‹จ ๋งˆ์ผ๋ฆฌ์ง€๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์„ฑ์ค€์ด์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค๊ณ  ํ•˜์ž.)

output#

์ฃผ์–ด์ง„ ๋งˆ์ผ๋ฆฌ์ง€๋กœ ์ตœ๋Œ€๋กœ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ณผ๋ชฉ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

think#

  1. list์—์„œ limit๋งŒํผ๋งŒ ํ•˜๋˜ ์ˆ˜๊ฐ•์‹ ์ฒญ์ธ์›์ด ํ•œ์ •์ธ์›๋ณด๋‹ค ์ ์œผ๋ฉด ์ตœ์†Œ์˜ ๋งˆ์ผ๋ฆฌ์ง€(1)๋กœ ์ˆ˜๊ฐ•์‹ ์ฒญ ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. ๋งŒ์•ฝ ์ˆ˜๊ฐ•์‹ ์ฒญ ์ธ์›์ด ๊ฝ‰์ฐผ์„ ๊ฒฝ์šฐ์—๋Š” ํ•œ์ •์ธ์› ์•ˆ์— ์žˆ๋Š” ๊ฒƒ ์ค‘ ์ตœ์†Œ๋งŒํผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์กฐ๊ฑด๋•Œ๋ฌธ์— ์„ฑ์ค€์ด๊ฐ€ ๋™์ผ ๋งˆ์ผ๋ฆฌ์ง€์ผ ๊ฒฝ์šฐ๋Š” ์ด๊ธด๋‹ค.

  3. ์ด ๋งˆ์ผ๋ฆฌ์ง€๋ฅผ ๊นŒ๋ฉด์„œ +1์”ฉ ํ•ด์ฃผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

โ€“ from su

python#

import sys, os

problem_num = "12018"

path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")
input = sys.stdin.readline
subject_num, mileage = map(int, input().split())
need = []
result = 0

for i in range(subject_num):
    enrolled, limit = map(int, input().split())
    m = sorted(list(map(int, input().split())), reverse=True)[:limit]
if len(m) < limit:
    need.append(1)
else:
    need.append(m[-1])

need.sort()

for i in need:
    if mileage >= i:
        mileage -= i
result += 1

print(result)
1

JavaScript#

Listing 6 node.js#
 1const problem_num = "12018";
 2const path = `${__dirname}\\txt\\${problem_num}.txt`;
 3// const path = "/dev/stdin"; // for baekjoon
 4
 5const input = require("fs").readFileSync(path, 'utf8').toString().trim().split('\n');
 6let currentLine = 0;
 7
 8//input setting
 9function readLine() {
10    return input[currentLine++].split(' ').map(Number);
11}
12
13// mileage๋Š” ๋’ค์—์„œ -= ํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— let์œผ๋กœ ๊ทœ์ • subject_num์€ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ
14let [subject_num, mileage] = readLine();
15let need = [];
16let result = 0;
17
18for (let i = 0; i < subject_num; i++) {
19    const [enrolled, limit] = readLine();
20    const m = readLine().sort((a, b) => b - a).slice(0, limit);
21    if (m.length < limit) {
22        need.push(1);
23    } else {
24        need.push(m[m.length - 1])
25    }
26}
27
28need.sort((a, b) => a - b);
29for (let i = 0; i < need.length; i++) {
30    if (mileage >= need[i]) {
31        mileage -= need[i];
32        result++;
33    } else {
34        break;
35    }
36}
37console.log(result)

readLine์„ ํ•จ์ˆ˜ํ™”ํ•ด์„œ ํ•œ ์ค„์”ฉ ์ฝ์–ด๊ฐ€๋ฉด์„œ ์ฝ”๋“œ๊ฐ€ ์ง„ํ–‰๋œ๋‹ค. mileage๋Š” ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— let์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , sort((a,b) => b-a)๋Š” ์—ญ์ˆœ์œผ๋กœ a-b๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์ฝ”๋“œ ์ž์ฒด๊ฐ€ pythonicํ•˜๊ธด ํ•˜์ง€๋งŒ javascript์Šค๋Ÿฌ์›€์€ ๋‚˜์ค‘์— ํ•„์š”์— ๋”ฐ๋ผ์„œ ์ฑ„์šฐ๋„๋ก ํ•˜์ž. ์ง€๊ธˆ์€ ์ด๊ฑธ๋กœ ๋งŒ์กฑ

JAVA#

Listing 7 java code#
 1import java.io.*;
 2import java.util.*;
 3
 4public class Main {
 5    public static void main(String[] args) throws IOException {
 6        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 7        StringTokenizer st = new StringTokenizer(br.readLine());
 8        int subjectNum = Integer.parseInt(st.nextToken());
 9        int mileage = Integer.parseInt(st.nextToken());
10        ArrayList<Integer> need = new ArrayList<>();
11
12        for (int i = 0; i < subjectNum; i++) {
13            st = new StringTokenizer(br.readLine());
14            int enrolled = Integer.parseInt(st.nextToken());
15            int limit = Integer.parseInt(st.nextToken());
16
17            ArrayList<Integer> m = new ArrayList<>();
18            st = new StringTokenizer(br.readLine());
19            while (st.hasMoreTokens()) {
20                m.add(Integer.parseInt(st.nextToken()));
21            }
22            Collections.sort(m, Collections.reverseOrder());
23            if (m.size() < limit) {
24                need.add(1);
25            } else {
26                need.add(m.get(limit - 1));
27            }
28        }
29        Collections.sort(need);
30        int result = 0;
31        for (int i : need) {
32            if (mileage >= i) {
33                mileage -= i;
34                result++;
35            }
36        }
37
38        System.out.println(result);
39    }
40}

์ž๋ฐ”๋Š” input์„ ๋ฐ›๋Š” ๊ณผ์ •์ด ์—„์ฒญ ๋ณ„๋กœ๋‹ค. ๊ธธ์ด๊ฐ€ ์—„์ฒญ ๊ธธ์–ด์ง€๊ณ  ์žก์„ค์ด ์—„์ฐฝ๋‚˜๊ฒŒ ๋งŽ์€ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.