문제
- 기다란 작업 라인에 로봇과 부품이 단위 간격으로 놓여 있다.
- 모든 로봇은 그의 위치 바로 옆에 인접한 거리가 K이하인 부품만 집을 수 있다.
- 로봇이 부품을 집을 때 왼쪽, 오른쪽은 상관없다.
- 부품을 집을 수 있는 로봇의 최대 수를 구하는 문제이다.
- 라인의 길이가 N일때 1 ≤ N ≤ 20,000인 정수이다.
- 부품을 집을 수 있는 거리가 K일때 1 ≤ K ≤ 10인 정수이다.
- P는 로봇이고 H는 부품이다.
알고리즘
- 라인의 길이와 부품을 집을 수 있는 거리를 입력받는다.
- 로봇(P)과 부품(H)의 위치를 문자로 입력받아 리스트 변수에 넣는다.
- 반복문을 통해 로봇의 위치를 찾고 로봇의 위치에서 바로 옆에 인접한 거리가 K이하인 부품을 찾는다.
- 부품은 왼쪽부터 집고 조건문을 통해 부품을 집을 때 라인의 길이를 넘지 않게 한다.
- 집은 부품은 다른 이름으로 바꾸어 구분한다.
- 매 부품을 집는 순간을 카운트 해주어 부품을 집을 수 있는 로봇의 최대 수를 출력한다.
코드
import sys
n, k = map(int, sys.stdin.readline().split())
# 로봇 = P, 부픔 = H
r = list(str(sys.stdin.readline()))
cnt = 0
# 반복문을 통해 로봇을 찾는다.
for i in range(n):
if r[i] == "P":
# 로봇의 위치에서 바로 옆에 인접한 거리가 K이하인 부품을 찾는다.
for j in range(i-k,i+k+1):
# 부품을 집는 거리는 라인의 길이를 넘지않게 한다.
if j < 0 or j > n:
continue
# 집은 부품은 다른 이름으로 바꿔 구분한다.
elif r[j] == "H":
# 부품을 집는 순간 카운트 해준다.
cnt += 1
r[j] = "A"
break
print(cnt)
결과
위 코드 밑에 print(r)을 작성하면 라인의 모습을 리스트로 확인할 수 있다.
위 출력 화면을 보게 되면 로봇이 집은 부품은 A라는 문자로 바꿔 다르게 구분하는 것을 확인할 수 있다.
따라서 코드를 분석하게 되면 반복문을 통해 로봇을 찾고 로봇의 K만큼의 거리에 있는 부품을 왼쪽부터 집는 것이다. 집은 부품은 다른 이름으로 바꿔 구분하고 이때 카운트를 해주어 부품을 집을 수 있는 로봇의 최대 수를 출력하면 된다.
github
'CodingTest > Softeer' 카테고리의 다른 글
[softeer] 소프티어(파이썬): 강의실 배정 ★★★ (0) | 2021.05.16 |
---|---|
[softeer] 소프티어(파이썬): 우물 안 개구리 ★★★ (0) | 2021.05.16 |
[softeer] 소프티어(파이썬): 성적 평균 ★★★ (0) | 2021.05.16 |
[softeer] 소프티어(파이썬): 금고털이 ★★ (1) | 2021.05.15 |
[softeer] 소프티어(파이썬): 징검다리 ★★★ (0) | 2021.05.14 |