본 내용은 '이것이 취업을 위한 코딩테스트다 with 파이썬' 책을 기반으로 포스팅 하였습니다.
문제
저작권 문제가 될 수 있어 문제는 삭제합니다.
풀이 코드
| 입력 | 출력 |
| 5 R R R U D D |
3 4 |
let n = 5
let move = ["R","R","R","U","D","D"]
var map = Array(repeating: Array(repeating: [Int](), count:n) ,count:n)
var start = [1,1]
let dx = [0,0,-1,1]
let dy = [-1,1,0,0]
for i in 0..<n {
for j in 0..<n {
map[i][j].append(contentsOf: [i+1,j+1])
}
print(map[i])
}
for i in move {
switch i {
case "L":
if start[1] + dy[0] == 0 {
continue
} else {
start[0] = start[0] + dx[0]
start[1] = start[1] + dy[0]
}
case "R":
if start[1] + dy[1] == 0 {
continue
} else {
start[0] = start[0] + dx[1]
start[1] = start[1] + dy[1]
}
case "U":
if start[0] + dx[2] == 0 {
continue
} else {
start[0] = start[0] + dx[2]
start[1] = start[1] + dy[2]
}
case "D":
if start[0] + dx[3] == 0 {
continue
} else {
start[0] = start[0] + dx[3]
start[1] = start[1] + dy[3]
}
default:
break
}
}
print(start) // [3,4]
문제 풀이
1. 초기값 세팅
-. 시작 위치 = [1,1]
-. L R U D 각각의 이동 좌표 [dx, dy]
-. 입력받은 n으로 n x n 크기의 빈 배열을 생성하고, 반복문으로 좌표값 입력
2. move 배열을 반복문으로 돌면서 switch문으로 배열 요소에 따라 좌표 이동
-. L → 왼쪽으로 이동했을때 y 좌표값이 0이라면 continue로 다음 반복 수행, y의 좌표값이 0이 아니라면 start 좌표값에 [0,-1] 더해서 왼쪽으로 이동한 최종 좌표값 계산
-. R → 왼쪽으로 이동했을때 y 좌표값이 0이라면 continue로 다음 반복 수행, y의 좌표값이 0이 아니라면 start 좌표값에 [0,1] 더해서 왼쪽으로 이동한 최종 좌표값 계산
-. U → 왼쪽으로 이동했을때 x 좌표값이 0이라면 continue로 다음 반복 수행, x의 좌표값이 0이 아니라면 start 좌표값에 [-1,0] 더해서 왼쪽으로 이동한 최종 좌표값 계산
-. D → 왼쪽으로 이동했을때 x 좌표값이 0이라면 continue로 다음 반복 수행, x의 좌표값이 0이 아니라면 start 좌표값에 [1,0] 더해서 왼쪽으로 이동한 최종 좌표값 계산
3. 최종적으로 이동한 좌표값 [3,4] 출력
'Algorithm > 이코테 문제풀이' 카테고리의 다른 글
| 구현 - 왕실의 나이트(Swift) (0) | 2022.06.11 |
|---|---|
| 구현 - 시각(Swift) (0) | 2022.06.10 |
| 그리디 - 1이 될 때까지(Swift) (0) | 2022.06.10 |
| 그리디 - 숫자 카드 게임(Swift) (0) | 2022.06.10 |
| 그리디 - 큰 수의 법칙(Swift) (0) | 2022.06.10 |