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
- 그래프
- PYTHON
- kick start
- 운영체제
- 순열
- google coding competition
- 브루트포스
- CSS
- 네트워크
- 딥러닝
- dp
- 리눅스
- BFS
- 동적프로그래밍
- 코딩
- nlp
- 구글 킥스타트
- AI
- 코딩테스트
- 동적 프로그래밍
- DFS
- OS
- 알고리즘
- 킥스타트
- 파이썬
- linux
- 프로그래머스
- 코딩 테스트
- 프로그래밍
- 백준
Archives
- Today
- Total
오뚝이개발자
[Google Kick Start] 2021 구글 킥스타트 Round F Trash Bins 풀이 본문
코딩 테스트/Google Kick Start
[Google Kick Start] 2021 구글 킥스타트 Round F Trash Bins 풀이
땅어 2021. 10. 8. 23:24728x90
300x250
문제
https://codingcompetitions.withgoogle.com/kickstart/round/0000000000435bae/0000000000887c32
나의 풀이
자신의 집 앞에 쓰레기통이 없는 경우 간단하게 두 가지 경우만 존재한다. 좌측 방향의 가장 가까운 쓰레기통을 선택하거나 우측 방향의 가장 가까운 쓰레기통을 선택하거나. 여기에 착안해서 L이라는 배열엔 무조건 좌측만을 선택해 거리를 계산한 값을 넣고, R이라는 배열엔 무조건 우측만을 선택해 거리를 계산한 값을 넣는다.
경계 조건을 신경써주어야 하는데 만약 00100으로 input이 주어지는 경우 L 배열을 채울 때 0, 1번째 인덱스 집들은 갱신하지 않고 최댓값 500,001로 그대로 둔다. R 역시 마찬가지이다.
그리고 두 배열의 값을 모두 갱신한 뒤에 마지막으로 동일한 인덱스의 L, R 값을 비교해 더 작은 것을 정답 ans에 더해준다.
문제의 핵심은 그냥 하나씩 거쳐가면서 좌, 우측 중에 가장 가까운 거리를 계산하는 방식인 O(n^2)이 아니라, 한 방향씩 거치면서 O(n)의 시간복잡도를 갖도록 프로그램을 설계하는 것이다.
코드
T = int(input())
for t in range(T):
n = int(input())
arr = input()
L, R = [500001 for _ in range(n)], [500001 for _ in range(n)]
# select left only
pos = -1
for i in range(n):
if arr[i]=='0' and pos==-1:
continue
if arr[i]=='1':
L[i] = 0
pos = i
else:
L[i] = i-pos
# select right only
pos = -1
for i in range(n-1,-1,-1):
if arr[i]=='0' and pos == -1:
continue
if arr[i]=='1':
R[i] = 0
pos = i
else:
R[i] = pos-i
ans = 0
for i in range(n):
ans += min(L[i], R[i])
print(f"Case #{t+1}: {ans}")
728x90
300x250
'코딩 테스트 > Google Kick Start' 카테고리의 다른 글
[Google Kick Start] 2021 구글 킥스타트 Round H Transform the string 풀이 (0) | 2021.11.20 |
---|---|
[Google Kick Start] 2021 구글 킥스타트 Round G Dogs and Cats 풀이 (0) | 2021.11.18 |
[Google Kick Start] 2021 구글 킥스타트 Round E Suffled Anagrams 풀이 (0) | 2021.11.14 |
[Google Kick Start] 2021 구글 킥스타트 Round D Arithmetic Square 풀이 (0) | 2021.11.14 |
[Google Kick Start] 2021 구글 킥스타트 Round B Increasing Substring 풀이 (0) | 2021.11.06 |
Comments