본문 바로가기

알고리즘/구름 edu

[구름LEVEL 유형 트레이닝 / 구현] 인공지능 청소기 (python)

728x90

풀이

test_case = int(input())
for t in range(test_case):
	X, Y, N = map(int, input().split())
	move = abs(X) + abs(Y)
	if (move - N) <= 0 and (move - N) % 2 == 0:
		print("YES")
	else:
		print("NO")

제일 처음 입력받는 test case 수를 test_case 변수에 입력받는다.

테스트 케이스 수만큼 반복문을 돌면서 각각 로봇청소기가 도달할 수 있는지 없는지를 YES 또는 NO로 출력한다.

 

(0, 0)에서 (X, Y)까지의 최소 이동 거리는 |X| + |Y|이다. 따라서 abs 함수를 이용하여 절댓값을 씌워준 값으로 이동 거리를 계산하여 move 변수에 저장한다.

 

로봇 청소기가 도달 가능하기 위해서는 이동거리가 N보다 작거나 같아야하고 (이동거리가 N초보다 더 크면 당연히 그 시간내에 이동할 수 없음), 이동거리 - N를 2로 나눴을 때 나누어 떨어져야한다.

예를 들어, 이동거리 - N = 0 이라면 딱 맞아떨어지므로 도달 가능하다.

이동거리 - N = 짝수 라면, 다른 곳에 잠깐 갔다가 돌아올 수 있기 때문에 도달 가능하다.

이동거리 - N = 홀수 라면, 다른 곳에 갔다가 다시 돌아올 수 없기 때문에 로봇 청소기가 목적지에 도달 불가능하다. (짝수면 다른 곳으로 이동했다가 돌아오는 거리가 똑같지만, 홀수는 가는 거리와 오는 거리가 똑같을 수 없기 때문이다)

 

위 조건에 맞춰서 if 문을 구성하고 답을 출력하면 된다.

 

 

 

처음에는 재귀함수로 풀어야하나 고민했는데 방문한 곳을 또 방문할 수 있어서 그런가 수학적으로 조금만 생각하면 간단히 풀 수 있는 문제였다.

반응형