Post

๐Ÿข ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ

1. ๋ฌธ์ œ ๋งํฌ

2023 KAKAO BLIND RECRUITMENT: ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ

๐Ÿ’› ๋ฌธ์ œ
๋‹น์‹ ์€ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋œ n๊ฐœ์˜ ์ง‘์— ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. 
๋ฐฐ๋‹ฌํ•  ๋ฌผ๊ฑด์€ ๋ชจ๋‘ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์— ๋‹ด์•„ ๋ฐฐ๋‹ฌํ•˜๋ฉฐ, ๋ฐฐ๋‹ฌ์„ ๋‹ค๋‹ˆ๋ฉด์„œ ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์ˆ˜๊ฑฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ๋‹ฌํ•  ํƒ๋ฐฐ๋“ค์€ ๋ชจ๋‘ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์— ๋‹ด๊ฒจ์„œ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์— ๋ณด๊ด€๋˜์–ด ์žˆ๊ณ , i๋ฒˆ์งธ ์ง‘์€ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ๊ฑฐ๋ฆฌ i๋งŒํผ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 
๋˜ํ•œ i๋ฒˆ์งธ ์ง‘์€ j๋ฒˆ์งธ ์ง‘๊ณผ ๊ฑฐ๋ฆฌ j - i๋งŒํผ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. (1 โ‰ค i โ‰ค j โ‰ค n)

ํŠธ๋Ÿญ์—๋Š” ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋ฅผ ์ตœ๋Œ€ cap๊ฐœ ์‹ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
ํŠธ๋Ÿญ์€ ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์‹ค์–ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ์ถœ๋ฐœํ•ด ๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌํ•˜๋ฉด์„œ, ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์ˆ˜๊ฑฐํ•ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์— ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. 

๊ฐ ์ง‘๋งˆ๋‹ค ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜์™€ ์ˆ˜๊ฑฐํ•  ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ, 
ํŠธ๋Ÿญ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๊นŒ์ง€ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. 
๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•  ๋•Œ, ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ cap, ๋ฐฐ๋‹ฌํ•  ์ง‘์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ n, 
๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์€ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด deliveries์™€ ๊ฐ ์ง‘์—์„œ ์ˆ˜๊ฑฐํ•  ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์€ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด pickups๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. 
์ด๋•Œ, ํŠธ๋Ÿญ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๊นŒ์ง€ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๐Ÿงก ์ œํ•œ ์‚ฌํ•ญ
1 โ‰ค cap โ‰ค 50
1 โ‰ค n โ‰ค 100,000
deliveries์˜ ๊ธธ์ด = pickups์˜ ๊ธธ์ด = n
    deliveries[i]๋Š” i+1๋ฒˆ์งธ ์ง‘์— ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    pickups[i]๋Š” i+1๋ฒˆ์งธ ์ง‘์—์„œ ์ˆ˜๊ฑฐํ•  ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    0 โ‰ค deliveries์˜ ์›์†Œ โ‰ค 50
    0 โ‰ค pickups์˜ ์›์†Œ โ‰ค 50
ํŠธ๋Ÿญ์˜ ์ดˆ๊ธฐ ์œ„์น˜๋Š” ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์ž…๋‹ˆ๋‹ค.


๐Ÿ’š ์ž…์ถœ๋ ฅ
cap	n	deliveries	          pickups         	      result
4 	5	[1, 0, 3, 1, 2]	      [0, 3, 0, 4, 0]	        16
2	  7	[1, 0, 2, 0, 1, 0, 2]	[0, 2, 0, 1, 0, 2, 0]	  30
"""

# ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ cap, ๋ฐฐ๋‹ฌํ•  ์ง‘์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ n
def solution(cap, n, deliveries, pickups):
  answer = 0

  # ํ˜„์žฌ ๋ฐฐ๋‹ฌ/์ˆ˜๊ฑฐ ๊ฐ€๋Šฅํ•œ ํƒ๋ฐฐ ๊ฐœ์ˆ˜
  deliver = 0   # ๋‚จ์€ ๋ฐฐ๋‹ฌ ๊ฐ€๋Šฅ
  pick = 0   # ๋‚จ์€ ์ˆ˜๊ฑฐ ๊ฐ€๋Šฅ

  for i in range(n-1, -1, -1):
    cnt = 0

    # ํ•ด๋‹น ์ง‘๊นŒ์ง€ ํ•œ ๋ฒˆ ๋” ์™€์•ผ ํ•จ
    while deliver < deliveries[i] or pick < pickups[i]:
      # ๋ช‡ ๋ฒˆ ์™”๋‹ค ๊ฐ”๋‹ค ํ•ด์•ผ ํ•˜๋Š”์ง€ ํšŸ์ˆ˜
      cnt += 1
      # ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐœ์ˆ˜
      deliver += cap
      pick += cap
    deliver -= deliveries[i]
    pick -= pickups[i]

    # ๋ฐฐ์†ก/์ˆ˜๊ฑฐ๋ฅผ ํ•˜๋ฉด์„œ ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ
    # ํ•ด๋‹น ์œ„์น˜๊นŒ์ง€ ์ด๋™ํ•œ ํšŸ์ˆ˜(cnt)๋ฅผ ๊ณฑํ•ด์ค€ ๋’ค answer์— ๋”ํ•ด์ค€๋‹ค
    answer += (i + 1) * cnt
    
    # ์™•๋ณต * 2
  return answer * 2

  • ์ •ํ™•์„ฑ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
      ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.38ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.72ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (2.08ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 10 ใ€‰ํ†ต๊ณผ (1.87ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 11 ใ€‰ํ†ต๊ณผ (1.69ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 12 ใ€‰ํ†ต๊ณผ (1.57ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 13 ใ€‰ํ†ต๊ณผ (0.91ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 14 ใ€‰ํ†ต๊ณผ (1.22ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 15 ใ€‰ํ†ต๊ณผ (23.13ms, 11.8MB)
      ํ…Œ์ŠคํŠธ 16 ใ€‰ํ†ต๊ณผ (271.49ms, 11.5MB)
      ํ…Œ์ŠคํŠธ 17 ใ€‰ํ†ต๊ณผ (68.59ms, 11.4MB)
      ํ…Œ์ŠคํŠธ 18 ใ€‰ํ†ต๊ณผ (31.40ms, 11.6MB)
      ํ…Œ์ŠคํŠธ 19 ใ€‰ํ†ต๊ณผ (31.33ms, 11.6MB)
      ํ…Œ์ŠคํŠธ 20 ใ€‰ํ†ต๊ณผ (34.18ms, 11.5MB)
    


3. ํ•ด์„ค

๋’ค์—์„œ๋ถ€ํ„ฐ ํƒ๋ฐฐ, ์ˆ˜๊ฑฐ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค

cap ๋ณด๋‹ค ํƒ๋ฐฐ, ์ˆ˜๊ฑฐ ์ˆ˜๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด ๋‹ค์‹œ ์‹œ์ž‘์ ์œผ๋กœ ๊ฐ€์„œ cap์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ณ  cnt +=1 ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

์˜ค๋Š” ๊ธธ์— ์ˆ˜๊ฑฐ, ํƒ๋ฐฐ๋Š” ์–ด์ฐจํ”ผ ๊ฑฐ๋ฆฌ์— ๋”ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์— * 2 ํ•ด์คŒ์œผ๋กœ์จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์คŒ

This post is licensed under CC BY 4.0 by the author.