Top Interview Questions
Easy Collection
LEVEL : 🌕 🌕 🌑 🌑 🌑 (하)
Easy Collection의 여덟번째 문제인 Move Zeroes를 풀어봤습니다.
문제 제목 그대로, 0인 값들을 뒤쪽으로 옮기는 문제였습니다.
이번 문제에서는 들어오는 nums의 값이 inout으로 표시가 되어서 직접 사용할 수 있었는데요, 항상 inout으로 되어 있는 문제는 새로운 배열을 만드는 것보다 그 자체에서 값을 바꿨을 때 효율이 컸어서 이번에도 그렇게 해보려고 노력했습니다.
코드를 보면서 설명드리겠습니다.
이번에는 1번째 방식으로 한 번에 문제를 풀었습니다.
저는 일단 위에서 말한 것처럼 지금 주어진 배열에서 문제를 바로 풀기 위해서 nums에서 0을 찾으면 해당 0를 지우고 맨 뒤로 0를 넣는 방식으로 코드를 짰습니다.
그렇게 되면 index가 0에서 바로 1로 계속해서 +1되는 방식이 아닌 해당 수가 0이 아니라면 +1되는 방식으로 진행되어야 합니다. 그러다보니 index를 조건문에 넣게 되면 1개라도 0이 있을 경우 조건을 영영 못 맞출 수도 있습니다.
그래서 따로 cnt라는 값을 둬서 한 턴마다 +1되도록 했습니다. 이렇게 했을 경우 원소의 개수에 맞게 조건문을 돌릴 수 있어서 좋았습니다.
func moveZeroes(_ nums: inout [Int]) {
guard nums.count > 1 else { return }
var index = 0
var cnt = 0
while cnt < nums.count {
if nums[index] == 0 {
nums.remove(at: index)
nums.append(0)
} else {
index += 1
}
cnt += 1
}
}
Runtime은 32ms정도로 좋았습니다.