티스토리 뷰
반응형
LeetCode 30 Day Challenge 4일차 입니다.
문제 이름은 Move Zeroes
- 문제
문제는 숫자 배열이 주어지고 in-place로 옮겨야 합니다.
함수를 call by reference 로 해결해야 한다는 의미 입니다.
주어진 변수 nums안의 데이터를 옮겨 해결한다는 의미 입니다.
- 풀이
class Solution {
public void moveZeroes(int[] nums) {
int temp = 0, zeroCount = 0;
if(nums[0] == 0) zeroCount++;
for(int i=1; i<nums.length; i++) {
if(nums[i] == 0) {
zeroCount++;
continue;
}
if(nums[i-zeroCount] == 0) {
temp = nums[i];
nums[i] = nums[i-zeroCount];
nums[i-zeroCount] = temp;
}
}
}
}
위 풀이 방법은 시간복잡도 O(n) 입니다.
임시로 수개의 숫자의 위치를 변경해줄 temp 변수와 현재까지 zero인 숫자를 카운트 하는 zeroCount 변수가 필요합니다.
만약 num[i]가 zero면 zeroCount를 증가 시키고 아니라면 num[i - zeroCount]의 숫자가 0이라면 현재 index의 값과 교체합니다.
이렇게 하면 0이 1개 이상이여도 한번의 교체만으로 문제를 해결 할 수 있습니다.
이해를 쉽게 돕자면 아래와 같이 변경되는 것을 알 수 있습니다.
[ 1, 0, 0, 3, 7 ]
위 숫자일때 만약 index가 3이라면 3의 숫자를 바라보고 있고 현재 zeroCount는 2입니다.
그러면 nums[index-zeroCount]로 nums[3-2]의 값을 확인하고 0이기 때문에 현재 3과 위치를 변경합니다.
[1, 3, 0, 0, 7]
그러면 위 배열처럼 변경이 되겠죠.
한번의 교체만으로 우리가 원하는 값을 얻을 수 있습니다.
이렇게 O(n) 으로 문제를 해결할 수 있습니다.
반응형
'알고리즘 > LeetCode 공부' 카테고리의 다른 글
[LeetCode] Java - Group Anagrams (0) | 2020.04.08 |
---|---|
[LeetCode] Java - Best Time to Buy and Sell Stock II (0) | 2020.04.07 |
[LeetCode] Java - Maximum Subarray (1) | 2020.04.05 |
[LeetCode] Java - Happy Number (0) | 2020.04.02 |
[LeetCode] Java - Single Number (0) | 2020.04.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬 numpy
- 넘파이
- 30 Day LeetCode Challenge
- git
- Java leetcode
- 노드
- 머신러닝
- numpy
- Java
- 퍼셉트론
- k8s metrics-server running
- 파이썬
- k8s metrics-server
- Node
- Component
- LeetCode 풀이
- 지도학습
- LeetCode 알고리즘 공부
- 리엑트
- LeetCode 5월 챌린지
- vscode
- 버츄얼스튜디오코드
- CHATGOT
- react
- GPTGOT
- React 프로젝트 생성
- Python
- GPT서비스
- 에라토스테네스
- LeetCode 30일 챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함