stack1

SOYOUNG·2021년 4월 20일
0

알고리즘 기본

목록 보기
4/5

swea4869 종이붙이기

def factorial(n):
    result = 1
    for i in range(2, n+1):
        result *= i
    return result

T = int(input())
for tc in range(1, T+1):
    N = int(input())
    box = []
    total = 0
    for i in range(N): # 10의 개수
        for j in range(N):# 20의 개수
            if 10 * i + 20 * j == N:
                ten_cnt = i
                twenty_cnt = j
                
                total += int(factorial(ten_cnt + twenty_cnt)/(factorial(ten_cnt)*factorial(twenty_cnt)) * 2**twenty_cnt)
                    
    print('#{} {}'.format(tc, total))

swea4866 괄호검사

for tc in range(1, int(input())+1):
    string = input()
    stk = []
    ans = 1
    for i in range(len(string)):
        if string[i] == '{' or string[i] == '(':
            stk.append(string[i])

        elif string[i] == '}' or string[i] == ')':
            if stk:
                chk = stk.pop()
                if (chk == '(' and string[i] == '}') or (chk == '{' and string[i] == ')'):
                    ans = 0
            else:
                ans = 0

    if stk:
        ans = 0



    print('#{} {}'.format(tc, ans))

swea4871 그래프 경로

def dfs(start):
    visited.append(start)
    for i in range(v+1):
        if i not in visited and arr[start][i]:
            dfs(i)

for tc in range(1, int(input())+1):
    v, e = map(int,input().split())
    visited = []
    arr = [[0] * (v + 1) for _ in range(v + 1)]
    for _ in range(e):
        a, b = map(int, input().split())
        arr[a][b] = 1
    s, g = map(int, input().split())

    dfs(s)
    if g in visited:
        print('#{} {}'.format(tc, 1))
    else:

        print('#{} {}'.format(tc, 0))

swea4873 반복문자지우기

def solve(string):
    for i in range(len(string)-1):
        if string[i] == string[i+1]:
            string.pop(i)
            string.pop(i)
            solve(string)



for tc in range(1, int(input()) + 1):
    string = input()
    stk = []
    for i in range(len(string)):
        stk.append(string[i])
        solve(stk)


    print('#{} {}'.format(tc, len(stk)))

swea2005 파스칼의 삼각형

T = int(input())

for tc in range(1, T+1):
    N = int(input())
    # P = [[1] for _ in range(N)]
    # P[1] = [1, 1] # 두번째 줄 까지는 다 동일하니까
    # for i in range(2, N): # 3번째 줄 부터
    #     for j in range(1, i):
    #         P[i].append(P[i-1][j-1]+P[i-1][j])
    #     P[i].append(1) # 끝도 다 1 이니까
    #
    # print('#{}'.format(tc))
    # for i in range(N):
    #     print(*P[i])

    P = [[1]]
    for i in range(1, N):
        row = [1]
        for j in range(len(P[-1])-1):
            summ = 0
            for k in range(2):
                summ += P[-1][j+k]
            row.append(summ)
        row.append(1)
        P.append(row)

    print('#{}'.format(tc))
    for i in range(N):
        print(*P[i])

swea1218 괄호 짝짓기

for tc in range(1, 11):
    length = int(input())
    bracket = input()
    s = []
    answer = 1
    for i in range(length):
        # s.append(bracket[i])
        if bracket[i] == ')':
            if '(' in s:
                s.pop(s.index('('))
            else:
                answer = 0
        elif bracket[i] == '}':
            if '{' in s:
                s.pop(s.index('{'))
            else:
                answer = 0
        elif bracket[i] == ']':
            if '[' in s:
                s.pop(s.index('['))
            else:
                answer = 0
        elif bracket[i] == '>':
            if '<' in s:
                s.pop(s.index('<'))
            else:
                answer = 0
        else:
            s.append(bracket[i])

    print('#{} {}'.format(tc, answer))

swea1234 비밀번호

for tc in range(1, 11):
    num, string = input().split()
    length = int(num)
    stack = []
    for i in range(length):
        stack.append(string[i])
        if len(stack) > 1 and stack[-1] == stack[-2]:
            stack.pop()
            stack.pop()
    print('#{}'.format(tc), end=' ')
    for i in range(len(stack)):
        print(''.join(stack[i]), end='')
    print()

swea1219 길찾기

def DFS(v):
    visted[v] = 1
    for i in range(100):
        if visted[i] == 0 and arr[v][i] == 1:
            DFS(i)

for tc in range(1, 11):

    num, E = map(int, input().split()) # E 는 간선수
    nodes = list(map(int, input().split()))
    box = [nodes[i*2:i*2+2] for i in range(len(nodes)//2)]
    arr = [[0] * 100 for _ in range(100)]

    for i in range(E):
        r = box[i][0]
        c = box[i][1]
        arr[r][c] = 1 # 정점끼리 이어진거 있으면 1로. 유향이니까 한번만.

    visted = [0] * 100

    DFS(0)

    print('#{} {}'.format(tc, visted[-1]))
profile
개발자 꿈나무

0개의 댓글