오뚝이개발자

2022 Google kickstart Round A 참가 후기 본문

Contest

2022 Google kickstart Round A 참가 후기

땅어 2022. 3. 25. 23:14
728x90
300x250

 

 

한국 시간으로 지난 주 일요일(3.20)에 있었던 킥스타트 Round A에 참가했다. 최종적으로는 4문제 중 2개를 풀었다. 그래도 지난 번 처음 참가했을 때 1개밖에 풀지 못했던 것과 비교하면 나름 선방한 것 같다.

1, 2번 문제는 어렵지는 않았는데 시간초과가 나지 않도록 잘 짜는 것이 관건이었다.

 

1. Speed Typing

문제 :https://codingcompetitions.withgoogle.com/kickstart/round/00000000008cb33e/00000000009e7021

 

Kick Start - Google’s Coding Competitions

Hone your coding skills with algorithmic puzzles meant for students and those new to coding competitions. Participate in one round or join them all.

codingcompetitions.withgoogle.com

P 문자열을 I 문자열로 만드는 문제이다. P 문자열에서 글자를 삭제해서 I 문자열을 만들어야 하는데 불가능한 경우 "IMPOSSIBLE"을 출력하면 된다. 나의 경우 먼저 IMPOSSIBLE한 경우를 분석해 먼저 검사하도록 하였다. 

def sol():
    I = input()
    P = input()
    I_dict, P_dict = {}, {}
    for a in I:
        if a not in I_dict:
            I_dict[a] = 0
        I_dict[a] += 1
    for a in P:
        if a not in P_dict:
            P_dict[a] = 0
        P_dict[a] += 1
    I_set, P_set = set(list(I)), set(list(P))
    if I_set - P_set:
        return "IMPOSSIBLE"
    for a in I_dict:
        if P_dict[a] < I_dict[a]:
            return "IMPOSSIBLE"
    i, j = 0, 0
    cnt = 0
    while i<len(I) and j<len(P):
        if I[i]==P[j]:
            i += 1
            j += 1
            cnt += 1
        else:
            j += 1
    if cnt != len(I):
        return "IMPOSSIBLE"
    else:
        return len(P)-len(I)

for t in range(int(input())):
    print(f"Case #{t+1}: "+str(sol()))

 

2. Challenge Nine

문제 :https://codingcompetitions.withgoogle.com/kickstart/round/00000000008cb33e/00000000009e7997

 

Kick Start - Google’s Coding Competitions

Hone your coding skills with algorithmic puzzles meant for students and those new to coding competitions. Participate in one round or join them all.

codingcompetitions.withgoogle.com

주어진 수에 0-9까지의 수 중 1개의 digit을 추가해서 가능한 가장 작은 9의 배수로 만드는 문제였다. 9의 배수의 경우 각 digit의 합이 9의 배수여야 한다는 성질을 이용해 구현하였다.

import sys
input = sys.stdin.readline

def sol():
    num = input().strip()
    num_sum = sum(list(map(int, list(num))))

    if num_sum % 9 == 0:
        return int(num[0]+'0'+num[1:])
    else:
        p = (num_sum // 9 + 1)*9 - num_sum
        # ans = min(int(str(p)+num), int(num+str(p)))
        # for i in range(1, len(num)):
        #     ans = min(ans, int(num[:i]+str(p)+num[i:]))
        ans = 0
        for i in range(len(num)):
            if p < int(num[i]):
                ans = int(num[:i] + str(p) + num[i:])
                break
        if ans == 0:
            ans = int(num+str(p))

        return ans

for t in range(int(input().strip())):
    print(f"Case #{t+1}: "+str(sol()))

 

3번과 4번 중 고민하다 배점이 더 큰 4번을 먼저 손댔는데....그러지말걸....

무튼 다음 번 참가할 땐 3개를 푸는 걸 목표로 해서 공부를 꾸준히 해야겠다!

이렇게 1개씩 늘리다보면 언젠가 4개 다 풀겠지!!

 

728x90
300x250

'Contest' 카테고리의 다른 글

WISENUT 2021 AI 텍스트 요약 온라인 해커톤 참가 후기  (0) 2021.12.11
Comments