CodingTest/Softeer

[softeer] 소프티어(파이썬): 스마트 물류 ★★★

JunJangE 2021. 5. 15. 19:50

문제

 

Softeer

제한시간 : C/C+/Java/Python(2초) | 메모리 제한 : 512MB 현대자동차그룹은 주요 물류센터에 각종 자동화 기기를 도입하며 ‘스마트 물류’를 실현하고 있다. 최근에는 자동차 반조립 부품(KD, Knock-Down)

softeer.ai

- 기다란 작업 라인에 로봇과 부품이 단위 간격으로 놓여 있다.

- 모든 로봇은 그의 위치 바로 옆에 인접한 거리가 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

 

junjange/CodingTest

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com