ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Binary Search] kakao 60060 ๊ฐ€์‚ฌ ๊ฒ€์ƒ‰
    Algorithms in Python/programmers 2021. 1. 24. 17:13

     

    ๐ŸŽˆ kakao 60060 ๊ฐ€์‚ฌ ๊ฒ€์ƒ‰

    programmers.co.kr/learn/courses/30/lessons/60060

     

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฐ€์‚ฌ ๊ฒ€์ƒ‰

     

    programmers.co.kr

     

    โ— ๋ฌธ์ œ์˜ ํ•ต์‹ฌ, ํ’€์ด ๊ณผ์ •

    '?'๋Š” ๊ธ€์ž ํ•˜๋‚˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    => ์˜ˆ๋ฅผ ๋“ค์–ด, "fro??" ๋Š” ๊ธธ์ด๊ฐ€ 5์ธ ๋‹จ์–ด์ด๋ฉฐ, ๊ธธ์ด๊ฐ€ 5์ธ ๋‹จ์–ด๋ฆฌ์ŠคํŠธ์—์„œ ์ฐพ๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

    => ๋ชจ๋“  ๋‹จ์–ด๋“ค์ด ๋‹ด๊ธด ๋ฐฐ์—ด words์—์„œ ๊ฐ ๋‹จ์–ด๋“ค์„ ๊ธธ์ด๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

     

    ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์ธ '?'๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์˜ ์ ‘๋‘์‚ฌ ์•„๋‹ˆ๋ฉด ์ ‘๋ฏธ์‚ฌ์ด๋‹ค.

    => ์ ‘๋‘์‚ฌ์ธ ๊ฒฝ์šฐ ๋‹จ์–ด๋ฅผ ๋’ค์ง‘์–ด์„œ ์ €์žฅํ•œ๋‹ค. -> reversed_arr ์ด์šฉ

     

    • ๋ชจ๋“  ๋‹จ์–ด๋“ค์ด ๋‹ด๊ธด ๋ฐฐ์—ด words์—์„œ ํ‚ค์›Œ๋“œ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด queries์˜ ํ‚ค์›Œ๋“œ ๋ณ„๋กœ ๋งค์น˜๋œ ๋‹จ์–ด๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. 

    => ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ํ‚ค์›Œ๋“œ์— ๋งค์น˜๋˜๋Š” ๋‹จ์–ด๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์„ผ๋‹ค.

         - bisect_left, bisect_right๋ฅผ ์ด์šฉํ•œ count_by_range๋ฅผ ์ด์šฉํ•œ๋‹ค.

     

    โœ… ์ „์ฒด ์ฝ”๋“œ

    import bisect
    
    # ๊ฐ’์ด [left_val, right_val] ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
    def count_by_range(a, left_val, right_val):
        right_index = bisect.bisect_right(a, right_val)
        left_index = bisect.bisect_left(a, left_val)
        return right_index - left_index
    
    arr = [[] for _ in range(10001)]
    reversed_arr = [[] for _ in range(10001)]
    
    def solution(words, queries):
        answer = []
    
        # ๋‹จ์–ด์˜ ๊ธธ์ด๋ณ„๋กœ ์ €์žฅ, ?๊ฐ€ ์ ‘๋ฏธ์‚ฌ๋ƒ ์ ‘๋‘์‚ฌ๋ƒ์— ๋”ฐ๋ผ ์ €์žฅํ•œ๋‹ค.
        # ์ ‘๋‘์‚ฌ์ธ๊ฒฝ์šฐ ๋’ค์ง‘์–ด์„œ ์ €์žฅํ•œ๋‹ค.
        for word in words:
            arr[len(word)].append(word)
            reversed_arr[len(word)].append(word[::-1])
        
        # ์ด์ง„ ํƒ์ƒ‰์„ ์œ„ํ•ด ๊ฐ ๊ธธ์ด๋ณ„ ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
        for i in range(10001):
            arr[i].sort()
            reversed_arr[i].sort()
    
        for x in queries:
            if x[0] != '?':
                # ___a ~ ___z ๊นŒ์ง€์˜ ๋‹จ์–ด ๊ฐฏ์ˆ˜๋ฅผ ์ฐพ์Œ
                result = count_by_range(arr[len(x)], x.replace('?', 'a'), x.replace('?', 'z'))
            else:
                result = count_by_range(reversed_arr[len(x)], x[::-1].replace('?', 'a'), x[::-1].replace('?', 'z'))
    
            answer.append(result)
    
        return answer

     

    ์ •์ˆ˜ ์ด์ง„ ํƒ์ƒ‰ ๋ฌธ์ œ๋งŒ ์ ‘ํ•˜๋‹ค ๋ฌธ์ž๋กœ ๋œ ๊ฒƒ์„ ํ•˜๋ ค๋‹ˆ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋‚˜ ๋ฒ”์œ„ ๋ถ€๋ถ„์—์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•  ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•˜๋‹ค. ํŒŒ์ด์ฌ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ณ , ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

     

    * ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ - ๋‚˜๋™๋นˆ

    'Algorithms in Python > programmers' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Impl] kakao 60057 ๋ฌธ์ž์—ด ์••์ถ•  (0) 2021.02.22

    ๋Œ“๊ธ€

Designed by Tistory.