300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AI
- linux
- PYTHON
- 코딩테스트
- 동적프로그래밍
- BFS
- 코딩 테스트
- 프로그래밍
- dp
- 프로그래머스
- 그래프
- 브루트포스
- 순열
- 킥스타트
- 운영체제
- 동적 프로그래밍
- 구글 킥스타트
- DFS
- google coding competition
- 리눅스
- OS
- nlp
- 코딩
- CSS
- 네트워크
- 백준
- 딥러닝
- 알고리즘
- kick start
- 파이썬
Archives
- Today
- Total
오뚝이개발자
2022 Google kickstart Round A 참가 후기 본문
728x90
300x250
한국 시간으로 지난 주 일요일(3.20)에 있었던 킥스타트 Round A에 참가했다. 최종적으로는 4문제 중 2개를 풀었다. 그래도 지난 번 처음 참가했을 때 1개밖에 풀지 못했던 것과 비교하면 나름 선방한 것 같다.
1, 2번 문제는 어렵지는 않았는데 시간초과가 나지 않도록 잘 짜는 것이 관건이었다.
1. Speed Typing
문제 :https://codingcompetitions.withgoogle.com/kickstart/round/00000000008cb33e/00000000009e7021
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
주어진 수에 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