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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""
์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธํ–‰์‚ฌ

๐Ÿ’› ๋ฌธ์ œ
์นด์นด์˜คํ†ก์—์„œ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ฌด์ œํ•œ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ์นด์นด์˜คํ†ก์—์„œ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ, ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋ฅผ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ.
์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก์„ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ.
1๋ฒˆ ๋ชฉํ‘œ๊ฐ€ ์šฐ์„ ์ด๋ฉฐ, 2๋ฒˆ ๋ชฉํ‘œ๊ฐ€ ๊ทธ ๋‹ค์Œ์ž…๋‹ˆ๋‹ค.

์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ ํ–‰์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

n๋ช…์˜ ์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ด๋ชจํ‹ฐ์ฝ˜ m๊ฐœ๋ฅผ ํ• ์ธํ•˜์—ฌ ํŒ๋งคํ•ฉ๋‹ˆ๋‹ค.
์ด๋ชจํ‹ฐ์ฝ˜๋งˆ๋‹ค ํ• ์ธ์œจ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ• ์ธ์œจ์€ 10%, 20%, 30%, 40% ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์„ ๋”ฐ๋ผ ์ด๋ชจํ‹ฐ์ฝ˜์„ ์‚ฌ๊ฑฐ๋‚˜, ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

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

์นด์นด์˜คํ†ก ์‚ฌ์šฉ์ž n๋ช…์˜ ๊ตฌ๋งค ๊ธฐ์ค€์„ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด users, ์ด๋ชจํ‹ฐ์ฝ˜ m๊ฐœ์˜ ์ •๊ฐ€๋ฅผ ๋‹ด์€ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด emoticons
ํ–‰์‚ฌ ๋ชฉ์ ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋‹ฌ์„ฑํ–ˆ์„ ๋•Œ์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค ๊ฐ€์ž… ์ˆ˜์™€ ์ด๋ชจํ‹ฐ์ฝ˜ ๋งค์ถœ์•ก์„ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿงก ์ œํ•œ ์‚ฌํ•ญ
์ œํ•œ์‚ฌํ•ญ
    1 โ‰ค users์˜ ๊ธธ์ด = n โ‰ค 100
    users์˜ ์›์†Œ๋Š” [๋น„์œจ, ๊ฐ€๊ฒฉ]์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    users[i]๋Š” i+1๋ฒˆ ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๊ธฐ์ค€์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    ๋น„์œจ% ์ด์ƒ์˜ ํ• ์ธ์ด ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
        1 โ‰ค ๋น„์œจ โ‰ค 40
    ๊ฐ€๊ฒฉ์ด์ƒ์˜ ๋ˆ์„ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค๋ฅผ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
        100 โ‰ค ๊ฐ€๊ฒฉ โ‰ค 1,000,000
        ๊ฐ€๊ฒฉ์€ 100์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
1 โ‰ค emoticons์˜ ๊ธธ์ด = m โ‰ค 7
    emoticons[i]`๋Š” i+1๋ฒˆ ์ด๋ชจํ‹ฐ์ฝ˜์˜ ์ •๊ฐ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    100 โ‰ค emoticons์˜ ์›์†Œ โ‰ค 1,000,000
    emoticons์˜ `์›์†Œ๋Š” 100์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ’š ์ž…์ถœ๋ ฅ
users	                                emoticons	                result
[[40, 10000], [25, 10000]]	            [7000, 9000]	            [1, 5400]
[[40, 2900], [23, 10000], 	            [1300, 1500, 1600, 4900]	[4, 13860]
[11, 5200], [5, 5900], 
[40, 3100], [27, 9200], [32, 6900]]
"""

# ์ค‘๋ณต์ˆœ์—ด(itertools์˜ product)
from itertools import product

def solution(users, emoticons):
    answer = []
    # ์ด๋ชจํ‹ฐ์ฝ˜์˜ ํ• ์ธ์œจ
    sales = [10, 20, 30, 40]    

    # tertools.product('ABCD', repeat=2)
    # ๊ฒฐ๊ณผ: AA AB AC AD BA BB BC BD CA CB => ์ค‘์ฒฉ๋œ for loop์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์นด๋ฅดํŠธ์˜ ๊ณฑ

    for i in product(sales, repeat=len(emoticons)): 
        # ๊ฐ€์ž…์ž ์ˆ˜, ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๊ฐ€๊ฒฉ ๋ˆ„์ 
        result = [0, 0]
        # users : [๋น„์œจ, ๊ฐ€๊ฒฉ]
        for user in users:
            temp = 0   
            for j, k in enumerate(i):
                # ์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ์œจ์ด ์œ ์ €๊ฐ€ ์›ํ•˜๋Š” ํ• ์ธ์œจ ์ด์ƒ์ด๋ฉด ๊ตฌ๋งค
                if k >= user[0]:    
                    temp += emoticons[j] * (100 - k) // 100

            # ์œ ์ € ๊ฐ€๊ฒฉ๋ณด๋‹ค ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ์Šค์— ๊ฐ€์ž…
            if temp >= user[1]:    
                result[0] += 1    # ๊ฐ€์ž…์ž ์นด์šดํŠธ +1
            else:
                result[1] += temp    # ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๊ฐ€๊ฒฉ ๋ˆ„์ 

        # ํ•ด๋‹น ํ• ์ธ์œจ ๊ฒฝ์šฐ์—์„œ ๊ตฌํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ answer์— ์ถ”๊ฐ€
        answer.append(result)

    # ๊ฐ€์ž…์ž ์ตœ๋Œ€, ์ด๋ชจํ‹ฐ์ฝ˜ ํŒ๋งค์•ก ์ตœ๋Œ€๋กœ ์ •๋ ฌ
    answer.sort(key=lambda x: (-x[0], -x[1]))    
    # ๊ฐ€์žฅ ์ตœ๋Œ€ ์ฒซ ๋ฒˆ์งธ ์ถœ๋ ฅ
    return answer[0]
  • ์ •ํ™•์„ฑ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
      ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.07ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.16ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.42ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (2.08ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (4.53ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (1.98ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (37.34ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (15.45ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (95.57ms, 10.6MB)
      ํ…Œ์ŠคํŠธ 10 ใ€‰ํ†ต๊ณผ (42.14ms, 11MB)
      ํ…Œ์ŠคํŠธ 11 ใ€‰ํ†ต๊ณผ (417.89ms, 10.9MB)
      ํ…Œ์ŠคํŠธ 12 ใ€‰ํ†ต๊ณผ (214.00ms, 13.7MB)
      ํ…Œ์ŠคํŠธ 13 ใ€‰ํ†ต๊ณผ (1978.58ms, 14.2MB)
      ํ…Œ์ŠคํŠธ 14 ใ€‰ํ†ต๊ณผ (1790.68ms, 14.2MB)
      ํ…Œ์ŠคํŠธ 15 ใ€‰ํ†ต๊ณผ (96.78ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 16 ใ€‰ํ†ต๊ณผ (116.31ms, 10.5MB)
      ํ…Œ์ŠคํŠธ 17 ใ€‰ํ†ต๊ณผ (0.43ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 18 ใ€‰ํ†ต๊ณผ (27.02ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 19 ใ€‰ํ†ต๊ณผ (0.06ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 20 ใ€‰ํ†ต๊ณผ (0.05ms, 10.1MB)
    


3. ํ•ด์„ค

์ด๋ชจํ‹ฐ์ฝ˜ ํ• ์ธ์„ ์ ์šฉํ•˜๋ฉฐ ์œ ์ € ๊ฐ€๊ฒฉ๋ณด๋‹ค ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋งŒ์ผ ๋•Œ๋งˆ๋‹ค result ์— ๊ฐ€์ž…์ž ์ˆ˜, ์ด๋ชจํ‹ฐ์ฝ˜ ๊ตฌ๋งค ๊ฐ€๊ฒฉ ๋ˆ„์  ํ–ˆ๋‹ค.

๋งˆ์ง€๋ง‰์— ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ตœ๋Œ€ ์ •๋ ฌ ํ•œ ํ›„ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ (์ตœ๋Œ€) ๋ถˆ๋Ÿฌ์˜จ๋‹ค

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