250x250
Link
๋‚˜์˜ GitHub Contribution ๊ทธ๋ž˜ํ”„
Loading data ...
Notice
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Data Science LAB

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต level2 (๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ) ๋ณธ๋ฌธ

๐Ÿ“ Coding Test/Programmers

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต level2 (๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ)

ใ…… ใ…œ ใ…” ใ…‡ 2022. 12. 27. 01:23
728x90

1. ๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • (), [], {} ๋Š” ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, (A), [A], {A} ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, [] ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, ([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A, B๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, AB ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, {} ์™€ ([]) ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, {}([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

๋Œ€๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์†Œ๊ด„ํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x (0 ≤ x < (s์˜ ๊ธธ์ด)) ์นธ๋งŒํผ ํšŒ์ „์‹œ์ผฐ์„ ๋•Œ s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๊ฒŒ ํ•˜๋Š” x์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

 

 

 

2. ์ œํ•œ ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

3. ๋‚ด ํ’€์ด

from collections import deque
def solution(s):
    answer = 0
    s= deque(s)
    s.rotate(1)
    left = ['[', '(', '{']
    right = [']',')', '}']
    for i in range(len(s)):
        s.rotate(-1)
        stack = []
        answer += 1
        for x in s:
            if x in left:
                stack.append(x)
            elif left[right.index(x)] not in stack:
                answer -= 1
                break
            elif left[right.index(x)] == stack[-1]:
                stack.pop()
            else:
                answer -=1
                break
        if stack != []:
            answer -=1
    return max(answer,0)

1. ๋ฌธ์ž์—ด์„ deque๋กœ ์„ ์–ธ (rotate()ํ•จ์ˆ˜ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•จ)

2. ์™ผ์ชฝ์— ์žˆ์–ด์•ผํ•˜๋Š” '(', '[', '{' ๋ฌธ์ž์—ด์„ ๋‹ด์€ left ๋ฆฌ์ŠคํŠธ๋กœ ์ƒ์„ฑ

3. ์˜ค๋ฅธ์ชฝ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ')', ']', '}' ๋ฌธ์ž์—ด์„ ๋‹ด์€ right ๋ฆฌ์ŠคํŠธ๋กœ ์ƒ์„ฑ

4. s์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณต -> ๋ฐ˜๋ณต๋งˆ๋‹ค rotate(-1), stack ์ƒ์„ฑ, answer +1

5. ๊ฐ ๋ฐ˜๋ณต์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ deque๋ฅผ x๋กœ ๋ฐ˜๋ณต

6. ๋งŒ์•ฝ x๊ฐ€ left ๋ฆฌ์ŠคํŠธ์— ์กด์žฌํ•œ๋‹ค๋ฉด stack์— ์ถ”๊ฐ€

7. x๊ฐ€ right ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ์ด์ง€๋งŒ x์˜ ์ง๊ฟ์ด stack์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด answer -1 ํ•œ ๋’ค break

-> ex) '(]'

8. x์˜ ์ง๊ฟ์ด right ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ์ด๊ณ  x์˜ ์ง๊ฟ์ด stack์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด answer -1 ํ•œ ๋’ค break

-> ex) '([)' 

9.  x์˜ ์ง๊ฟ์ด right ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ์ด๊ณ  x์˜ ์ง๊ฟ์ด stack์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ผ๋ฉด stack ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ popํ•˜์—ฌ ์‚ญ์ œ

10. ๋งˆ์ง€๋ง‰์œผ๋กœ stack์— ์›์†Œ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด answer -1

-> ex) '{{{}' ๋ฐฉ์ง€ 

 

 

 

 

 

4. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

def is_valid(s):
    stack = []
    for ch in s:
        if not stack:
            stack.append(ch)
        elif stack[-1] == '(':
            if ch==')': stack.pop()
            else: stack.append(ch)
        elif stack[-1] == '{':
            if ch=='}': stack.pop()
            else: stack.append(ch)
        elif stack[-1] == '[':
            if ch==']': stack.pop()
            else: stack.append(ch)

    return False if stack else True

def solution(s):
    answer = 0
    for i in range(len(s)):
        answer += is_valid(s[i:]+s[:i])
    return answer
728x90
Comments