문제
문제 설명
게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.
- U: 위쪽으로 한 칸 가기
- D: 아래쪽으로 한 칸 가기
- R: 오른쪽으로 한 칸 가기
- L: 왼쪽으로 한 칸 가기
캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
예를 들어, "ULURRDLLU"로 명령했다면
- 1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다.
- 8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다.
이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만, 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다. (8, 9번 명령어에서 움직인 길은 2, 3번 명령어에서 이미 거쳐 간 길입니다)
단, 좌표평면의 경계를 넘어가는 명령어는 무시합니다.
예를 들어, "LULLLLLLU"로 명령했다면
- 1번 명령어부터 6번 명령어대로 움직인 후, 7, 8번 명령어는 무시합니다. 다시 9번 명령어대로 움직입니다.
이때 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다.
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요.
입력 & 출력
입출력 예
dirsanswer
"ULURRDLLU" | 7 |
"LULLLLLLU" | 7 |
풀이 과정
1. x와 y의 포지션에 대한 값을 표현할 수 있게 pos_x, pos_y 변수를 만들어 줍니다.
2. 주어진 지시에 따라서 움직였을 때 정해진 범위를 벗어나는지 여부를 판별할 수 있게 하기 위하여 변화된 값을 일시적으로 저장할 temp 변수들을 만들어줍니다.
3. "UDRL"에 따라서 x와 y값을 변화시켜주고 해당 값이 -5 ~ 5 사이에 있다면 해당 값을 저장할 수 있게 구성합니다 여기서 조건문에는 절댓값 함수를 이용하여 범위 안에 있는지를 확인하여 줍니다.
4. 시작하는 x,y값과 끝나는 x, y값을 만들어주면서 이것을 중복을 제거해주는 set() 자료형으로 선언한 변수 s에 add 해 줍니다. 지나간 길을 판별하기 때문에 start 값과 end값의 위치를 바꾼 내용으로도 같이 add 해 줍니다.
5. s의 길이를 answer의 값에 대입하여 리턴합니다 이때 4번에서 순서를 바꾼것도 같이 추가하여 길이가 2배가 되었으므로 2로 나누어서 리턴하도록 합니다.
코드
def solution(dirs):
pos_x = 0
pos_y = 0
temp_pos_x = 0
temp_pos_y = 0
s = set()
for dir in dirs:
if dir == "U":
temp_pos_y = pos_y + 1
temp_pos_x = pos_x
elif dir == "D":
temp_pos_y = pos_y - 1
temp_pos_x = pos_x
elif dir == "R":
temp_pos_x = pos_x + 1
temp_pos_y = pos_y
elif dir == "L":
temp_pos_x = pos_x - 1
temp_pos_y = pos_y
if abs(temp_pos_x) <= 5 and abs(temp_pos_y) <= 5:
start_x = pos_x
start_y = pos_y
pos_x = temp_pos_x
pos_y = temp_pos_y
end_x = pos_x
end_y = pos_y
s.add((start_x, start_y, end_x, end_y))
s.add((end_x, end_y, start_x, start_y))
answer = len(s) // 2
return answer
'Algorithm' 카테고리의 다른 글
[ETC] 원의 방적식을 이용한 별찍기 (0) | 2022.09.25 |
---|---|
[프로그래머스] 줄 서는 방법 (0) | 2022.09.07 |
[프로그래머스] 위장 (0) | 2022.08.29 |
[프로그래머스] 튜플 (0) | 2022.08.28 |
[프로그래머스] 수식 최대화 (0) | 2022.08.24 |