( 문제 )
다음과 같이 "EEESEEEEEENNNN" 방향이 주어집니다. ( E: 동 N: 북, S: 남, W: 서 )
방향 하나당 100M이며 1의 시간이 걸립니다.
해당 예시로 들면 E방향으로 300M 후에 S로 움직이니 오른쪽으로 움직이는 겁니다
다시 한 번 E로 움직이니 왼쪽으로 움직이는 거지요. 그리고 6번 움직이는데,, 5번 이상 같은 방향으로 움직여야 된다고 판단될 시 100M씩은 내비게이션은 지시를 안 해도 됩니다 ( 문제 풀 때 이부분을 못 봐서 문제를 제대로 못 품 )
그렇기 500M 움직인 이후에 다시 N방향으로 가니까 왼쪽으로 움직이게 되는 거죠.
결론적으로 출력 결과는
'Time 0:Go straight 300m and turn right',
'Time 3:Go straight 100m and turn left',
'Time 5:Go straight 500m and turn left' # Time이 5인 이유 -> 6칸 직진하기 때문에 같은 방향으로 이동하는 한 칸은 내비게이션이 언급하지 않아도 되기 때문
이렇게 나옵니다.
다른 예제 입력 2 )
SSSSSSWWWNNNNNN
답 2 )
["Time 1: Go straight 500m and turn right","Time 6: Go straight 300m and turn right"]
( 문제 해설 )
구현 문제라 해설할 건 없지만 개인적으로 저는
현 노드에서 다음 노드가 방향이 변환할 때를 체크하는 것보다
이전 노드와 현 노드가 달라지는 것으로 체크하는 게 편하더라고요.
+
왼쪽 오른쪽은 이동방향을 정면으로 할 때의 기준입니다.
타임을 스킵한다는 게 이해가 좀 안 가실 겁니다 그림으로 설명하겠습니다.
설명이 부족하지만 조금 곰곰이 생각해보시면 제가 멀 의도하는지 아실지도..
코드도 함께 보아요
[ 코드 ]
def dirchk(curDir, next):
direct = ""
if curDir == 'N' and next == "E":
direct = "right"
elif curDir == "E" and next == "S":
direct = "right"
elif curDir == "S" and next == "W":
direct = "right"
elif curDir == "W" and next == "N":
direct = "right"
# e -> n, n -> w, w -> s, s -> e: left
if curDir == 'E' and next == "N":
direct = "left"
elif curDir == "N" and next == "W":
direct = "left"
elif curDir == "W" and next == "S":
direct = "left"
elif curDir == "S" and next == "E":
direct = "left"
return direct
def solution(path):
answer = []
res = []
start_pos = 0
same_pt = 1
prev_pt = -1
for i in range(1, len(path)):
cur_dir = path[i - 1]
next_dir = path[i]
if cur_dir == next_dir:
same_pt += 1
if same_pt > 5:
same_pt -= 1
start_pos += 1
elif cur_dir != next_dir:
dir = dirchk(cur_dir, next_dir)
# 바로 방향 전환 된 경우
if prev_pt == 1:
res.append([start_pos, same_pt, dir])
else:
prev_pt = same_pt
res.append([start_pos, same_pt, dir])
start_pos = i
same_pt = 1
print(res)
# "vars are %d and %d." % (a, b)
for r in res:
a, b, c = r
ans = "Time %d:Go straight %dm and turn %s" % (a, b * 100, c)
answer.append(ans)
# print(res)
return answer
print(solution("EEESEEEEEENNNN"))
후기
테케 2를 왜 안 봤을까..?
테케 2를 봤으면 풀 수 있었을 텐데 너무 아쉽네요..
그리고 방향 전환 같은 경우는 동서남북을 인덱스로 표시하고
+1 값이면 오른쪽 -1 값이면 왼쪽으로 하는 쉽게 할 수 도 있었습니다
당시에는 급해서 무식하게 했네요...
남은 2문제는 풀이할 겁니다
두 번째 문제는 이미 풀어놓은 상태고요..
예.. 다들 그럼 즐공!!
'코딩테스트 풀이 정리 > 코테2' 카테고리의 다른 글
코딩 테스트_3. 해당 단어를 원하는 단어로 변환 (2) | 2022.04.12 |
---|---|
코딩 테스트_2. 가장 많이 반복되는 문자열들 제거 (0) | 2022.04.12 |