제 2회 UNIST 알고리즘 프로그래밍 경시대회 Uni-CODE 2020 Open Contest 후기

사막의배·2020년 11월 30일
0

https://www.acmicpc.net/contest/view/555

2020년 11월 28일 저녁 6시부터 3시간동안 진행된 알고리즘 프로그래밍 경시대회에 참여하였다.

A 내 풀이:

N = int(input())
lst = list(map(int, input().split()))
cnt = 0
last_num = lst[0]

for idx, num in enumerate(lst):
    if idx % 2 == num % 2:
        print("NO")
        break
else:
    print("YES")

B 내 풀이:

S = input()
num_of_zero = 0
for c in S:
    if c == '0':
        num_of_zero += 1
num_of_one = (len(S) - num_of_zero) // 2
num_of_zero //= 2

ans = ''
for c in S:
    if c == '0':
        if num_of_zero > 0:
            num_of_zero -= 1
            ans += '0'
    elif c == '1':
        if not num_of_one:
            ans += '1'
        else:
            num_of_one -= 1

print(ans)

C 내 풀이:

N, K = map(int, input().split())
lst = list(map(int, input().split()))
data = []
for idx, cnt in enumerate(lst):
    data.append([cnt, str(idx + 1)])

data.sort(key=lambda x: -x[0])
if data[0][0] > N // 2 + N % 2:
    print("-1")
else:
    lst = []
    for cnt, num in data:
        lst += [num] * cnt
    end = len(lst)
    ans = []
    for i in range(end):
        if not i % 2:
            ans.append(lst[i // 2])
        else:
            ans.append(lst[end - 1 - i // 2])
    print(' '.join(ans))

D 내 풀이:

N = int(input())
data = list(map(int, input().split()))

ans = 0
num = 1

for n in data:
    num *= n
    n %= (10 ** 9 + 7)
    ans += num
    num += 1

print(ans % (10 ** 9 + 7))

E 내 풀이:

from collections import deque

N, M, A, B = map(int, input().split())
road = {}
magic = []
row = []
for i in range(M):
    U, V, T = map(int, input().split())
    if U in road:
        road[U].add((V, i))
    else:
        road[U] = set()
        road[U].add((V, i))
    if V in road:
        road[V].add((U, i))
    else:
        road[V] = set()
        road[V].add((U, i))
    row.append(T)
magic.append(row)

K = int(input())
for _ in range(K):
    row = list(map(int, input().split()))
    magic.append(row)

res = [[10**13] * (K+1) for _ in range(N+1)]
q = deque()
q.append((A, 0))
res[A][0] = 0

while q:
    s, row = q.popleft()
    for tu in road[s]:
        e, i = tu
        new = res[s][row] + magic[row][i]
        if res[e][row] > new:
            res[e][row] = new
            q.append((e, row))
        if row < K:
            new = res[s][row] + magic[row + 1][i]
            if res[e][row + 1] > new:
                res[e][row + 1] = new
                q.append((e, row + 1))

print(min(res[B]))
profile
하루하루 성장하는 개발자

0개의 댓글