Post

๐Ÿงฉ Baekjoon 30802 - ์›ฐ์ปด ํ‚คํŠธ

๐Ÿงฉ Baekjoon 30802 - ์›ฐ์ปด ํ‚คํŠธ

๋ฌธ์ œ

2024๋…„ 2์›” 3์ผ ๊ฐœ์ตœ ์˜ˆ์ •์ธ ์˜จ์‚ฌ์ดํŠธ ๊ทธ๋žœ๋“œ ์•„๋ ˆ๋‚˜์—์„œ๋Š”
์ฐธ๊ฐ€์ž๋“ค์—๊ฒŒ ํ‹ฐ์…”์ธ  ํ•œ ์žฅ๊ณผ ํŽœ ํ•œ ์ž๋ฃจ๊ฐ€ ํฌํ•จ๋œ ์›ฐ์ปด ํ‚คํŠธ๋ฅผ ๋‚˜๋ˆ ์ค„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
ํ‚คํŠธ๋ฅผ ์ œ์ž‘ํ•˜๋Š” ์—…์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์œผ๋กœ๋งŒ ์ฃผ๋ฌธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์…”์ธ ๋Š” S, M, L, XL, XXL, ๊ทธ๋ฆฌ๊ณ  XXXL์˜ 6๊ฐ€์ง€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ‹ฐ์…”์ธ ๋Š” ๊ฐ™์€ ์‚ฌ์ด์ฆˆ์˜ T์žฅ ๋ฌถ์Œ์œผ๋กœ๋งŒ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŽœ์€ ํ•œ ์ข…๋ฅ˜๋กœ, P์ž๋ฃจ์”ฉ ๋ฌถ์Œ์œผ๋กœ ์ฃผ๋ฌธํ•˜๊ฑฐ๋‚˜ ํ•œ ์ž๋ฃจ์”ฉ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด N๋ช…์˜ ์ฐธ๊ฐ€์ž ์ค‘ S, M, L, XL, XXL, XXXL ์‚ฌ์ด์ฆˆ์˜ ํ‹ฐ์…”์ธ ๋ฅผ ์‹ ์ฒญํ•œ ์‚ฌ๋žŒ์€
๊ฐ๊ฐ S, M, L, XL, XXL, XXXL๋ช…์ž…๋‹ˆ๋‹ค.
ํ‹ฐ์…”์ธ ๋Š” ๋‚จ์•„๋„ ๋˜์ง€๋งŒ ๋ถ€์กฑํ•ด์„œ๋Š” ์•ˆ ๋˜๊ณ  ์‹ ์ฒญํ•œ ์‚ฌ์ด์ฆˆ๋Œ€๋กœ ๋‚˜๋ˆ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŽœ์€ ๋‚จ๊ฑฐ๋‚˜ ๋ถ€์กฑํ•ด์„œ๋Š” ์•ˆ ๋˜๊ณ  ์ •ํ™•ํžˆ ์ฐธ๊ฐ€์ž ์ˆ˜๋งŒํผ ์ค€๋น„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์…”์ธ ๋ฅผ T์žฅ์”ฉ ์ตœ์†Œ ๋ช‡ ๋ฌถ์Œ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋Š”์ง€,
๊ทธ๋ฆฌ๊ณ  ํŽœ์„ P์ž๋ฃจ์”ฉ ์ตœ๋Œ€ ๋ช‡ ๋ฌถ์Œ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ๊ณ ,
๊ทธ ๋•Œ ํŽœ์„ ํ•œ ์ž๋ฃจ์”ฉ ๋ช‡ ๊ฐœ ์ฃผ๋ฌธํ•˜๋Š”์ง€ ๊ตฌํ•˜์„ธ์š”.

์ž…๋ ฅ

์ฒซ ์ค„์— ์ฐธ๊ฐ€์ž์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘˜์งธ ์ค„์— ํ‹ฐ์…”์ธ  ์‚ฌ์ด์ฆˆ๋ณ„ ์‹ ์ฒญ์ž์˜ ์ˆ˜ S, M, L, XL, XXL, XXXL์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
์…‹์งธ ์ค„์— ์ •์ˆ˜ ํ‹ฐ์…”์ธ ์™€ ํŽœ์˜ ๋ฌถ์Œ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ •์ˆ˜ T์™€ P๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ ์ค„์— ํ‹ฐ์…”์ธ ๋ฅผ T์žฅ์”ฉ ์ตœ์†Œ ๋ช‡ ๋ฌถ์Œ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜์„ธ์š”.
๋‹ค์Œ ์ค„์— ํŽœ์„ P์ž๋ฃจ์”ฉ ์ตœ๋Œ€ ๋ช‡ ๋ฌถ์Œ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š”์ง€์™€,
๊ทธ ๋•Œ ํŽœ์„ ํ•œ ์ž๋ฃจ์”ฉ ๋ช‡ ๊ฐœ ์ฃผ๋ฌธํ•˜๋Š”์ง€ ๊ตฌํ•˜์„ธ์š”.โ€‹

์˜ˆ์ œ

โœ… ์ž…๋ ฅ 1

1
2
3
23 
3 1 4 1 5 9 
5 7

โœ… ์ถœ๋ ฅ 1

1
2
7
3 2

์ž‘์„ฑ ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		long startTime = System.currentTimeMillis();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int[] sizes = Arrays.stream(br.readLine().split(" "))
			.mapToInt(Integer::parseInt)
			.toArray();
				
		StringTokenizer st = new StringTokenizer(br.readLine());
		int t = Integer.parseInt(st.nextToken());
		int p = Integer.parseInt(st.nextToken());
		
		int tBundle = Arrays.stream(sizes)
			.map(i -> (i % t) > 0 ? (i / t) + 1 : (i / t))
			.sum();
				
		int pBundle = n / p;
		int pEach = n % p;
		
		System.out.println(tBundle);
		System.out.printf("%d %d\n", pBundle, pEach);
		
		long endTime = System.currentTimeMillis();
		
		System.out.println("์‹คํ–‰ ์‹œ๊ฐ„: " + (endTime - startTime) + " ms");
	}
}
  • ์‹คํ–‰ ์‹œ๊ฐ„์€ 955 ms๋‹ค.

๊ฐœ์„  ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		long startTime = System.currentTimeMillis();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		
		String[] sizeStrArr = br.readLine().split(" ");
		int[] sizes = new int[sizeStrArr.length];
		for (int i = 0; i < sizeStrArr.length; i++) {
			sizes[i] = Integer.parseInt(sizeStrArr[i]);
		}
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int t = Integer.parseInt(st.nextToken());
		int p = Integer.parseInt(st.nextToken());
		
		int tBundle = 0;
		for (int size : sizes) {
			if (size % t > 0) {
				tBundle += (size / t) + 1;
			} else {
				tBundle += size / t;
			}
		}
		
		int pBundle = n / p;
		int pEach = n % p;
		
		System.out.println(tBundle);
		System.out.printf("%d %d\n", pBundle, pEach);
		
		long endTime = System.currentTimeMillis();
		
		System.out.println("์‹คํ–‰ ์‹œ๊ฐ„: " + (endTime - startTime) + " ms");
	}
}
  • ์‹คํ–‰ ์‹œ๊ฐ„์€ 918ย ms๋‹ค.

ํšŒ๊ณ 

  • Stream์„ ํ†ตํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ณด๋‹ค ์กฐ๊ธˆ ๋น ๋ฅด๊ธด ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์•„์„œ ๊ทธ๋Ÿฐ์ง€ ์ฐจ์ด๊ฐ€ ๋ฏธ๋ฏธํ•˜๋‹ค.
  • ๋ฐ˜๋ณต์„ ํ›จ์”ฌ ๋งŽ์ด ํ•œ๋‹ค๋ฉด ์ฐจ์ด๊ฐ€ ์ปค์งˆ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
  • for-each๋ฌธ์ด ๋น ๋ฅด๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด Stream๋ณด๋‹ค ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€์ง€๋งŒ ์•Š๋Š”๋‹ค๋ฉด Stream์ด ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ๋‘ ๋ฌธ๋ฒ• ๊ฐ„์˜ Trade-off๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ ์ ˆํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.
This post is licensed under CC BY 4.0 by the author.