해리의 데브로그

SWEA 1238 - Contact(BFS)

|

문제

  • SWEA 1238 - Contact
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

def BFS(start_node):
    visited[start_node] = 1
    Q.append(start_node)

    while Q:
        start_node = Q.pop(0)
        for next_node in range(1, N+1):
            if MyMap[start_node][next_node] and not visited[next_node]:
                visited[next_node] = 1
                Q.append(next_node)
                Distance[next_node] = Distance[start_node]+1

    return

TC = 10
for tc in range(1, TC+1):
    Len, init_num = map(int, input().split())
    Data = list(map(int, input().split()))
    N = max(Data)
    MyMap = [[0]*(N+1) for _ in range(N+1)]

    for i in range(Len//2):
        start = Data[i*2]
        end = Data[(i*2)+1]
        MyMap[start][end] = 1

    Q = []
    Distance, visited = [0]*(N+1), [0]*(N+1)

    BFS(init_num)
    print(Distance)

    max_D = Distance[0]
    for i in range(1, len(Distance)):
        if max_D <= Distance[i]:
            max_D = Distance[i]
            index = i

    print('#%s %d'%(tc, index))
    # print(f'#{tc} {index}')

SWEA 1209 - Sum

|

문제

  • SWEA 1209 - Sum
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

TC = 10
for tc in range(1, TC+1):
    lst = []
    N = int(input())
    for i in range(100):
        sub_lst = list(map(int, input().split()))
        lst.append(sub_lst)

    result = []

    for y in range(len(lst)): #각 행의 합
        sum_row = 0
        for x  in range(len(lst)):
            sum_row += lst[y][x]
        result.append(sum_row)

    for x in range(len(lst)): #각 열의 합
        sum_col = 0
        for y in range(len(lst)):
            sum_col += lst[y][x]
        result.append(sum_col)

    sum_diagonal1 = 0
    for y in range(len(lst)):   #첫번째 대각선의 합
        for x in range(len(lst)):
            if y == x:
                sum_diagonal1 += lst[y][x]
    result.append(sum_diagonal1)

    sum_diagonal2 = 0
    for y in range(len(lst)): #두번쨰 대각선의 합
        for x in range(len(lst)):
            if y == len(lst)-x:
                sum_diagonal2 += lst[y][x]
    result.append(sum_diagonal2)

    print(f'#{tc} {max(result)}')

SWEA 1208 - Flatten

|

문제

  • SWEA 1208 - Flatten
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

for tc in range(1, 11):
    num = int(input())
    Data = list(map(int, input().split()))
    for i in range(num):
        max_d, min_d= max(Data), min(Data)
        index_max_d = Data.index(max_d)
        index_min_d = Data.index(min_d)
        Data[index_max_d] -= 1
        Data[index_min_d] += 1
    print('#%s %d'%(tc, max(Data)-min(Data)))

SWEA 1224- 계산기3

|

문제

  • SWEA 1224 - 계산기3
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

import sys
sys.stdin = open('1224_계산기.txt', 'r')

for tc in range(1,11):
    N = int(input())
    Data = input()
    stack = []
    num_lst = []

    icp = {'*':2, '+':1, '(':3} #넣을때
    isp = {'*':2, '+':1, '(':0} #스택안

    #Step 1: 중위 => 후위 표기법 변경
    for i in range(N):
        #피연산자인 경우: 숫자 리스트 넣기
        if Data[i].isdigit():
            num_lst.append(Data[i])

        #연산자인 경우
        else:
            #stack이 빈 경우 => 무조건 append(여는 괄호의 case)
            if not stack:
                stack.append(Data[i])
                continue

            #stack이 비지 않은 경우
            elif stack:
                #닫는 괄호인 경우, 여는 괄호가 나올 때 까지 pop
                if Data[i] == ')':
                   while stack[-1] != '(':
                       num_lst.append(stack.pop())
                   stack.pop()

                #icp & isp 비교
                elif icp[Data[i]] > isp[stack[-1]]:
                    stack.append(Data[i])

                else:
                    #icp가 isp 보다 작으면 계속 pop & 연산자 리스트에 append
                    while icp[Data[i]] <= isp[stack[-1]]:
                        num_lst.append(stack.pop())
                    stack.append(Data[i])

    #print(num_lst)

    #step 2: 계산
    for i in range(len(num_lst)):
        if num_lst[i].isdigit():
            stack.append(num_lst[i])

        else:
            num2 = int(stack.pop())
            num1 = int(stack.pop())

            if num_lst[i] == "+":
                result = num1 + num2
            elif num_lst[i] == "*":
                result = num1 * num2

            stack.append(str(result))

    print(f'#{tc} {stack[0]}')

SWEA 1267- 작업 순서

|

문제

  • SWEA 1267 - 작업 순서
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

for tc in range(1, 11):
    v, e = map(int, input().split())
    MyMap = [[0] * (v + 1) for _ in range(v + 1)]
    visited = []

    Data = list(map(int, input().split()))
    N = int(len(Data) / 2)

    for i in range(N):
        row = Data[i * 2]
        col = Data[i * 2 + 1]
        MyMap[col][row] = 1

    result = []
    while True:
        if len(result) == v:
            break

        # #시작점 찾기
        start_col = []
        for col in range(1, len(MyMap)):
            if 1 not in MyMap[col] and col not in result:
                start_col.append(col)
        # print(start_col)

        for col in start_col:
            result.append(col)
            for row in range(len(MyMap)):
                MyMap[row][col] = 0
        # print(MyMap)

    print(f'#{tc}', end=" ")
    for i in result:
        print(f'{i}', end=" ")
    print()