숫자로 된 배열이 주어졌을 때, 1이 연속되게 나오는 횟수가 제일 큰 것을 구해야 한다.
먼저 처음 들었던 생각은 '1 뒤에 1이 올 때와 1 뒤에 0이 올 때로 나눠서 풀어야하나..?' 였다.
그래서 시도했던 로직은 제일 마지막 인덱스와 나머지를 구분한 뒤 케이스를 나눠주는 것이었다.
- index < nums.length - 1 일 때 -> 1 뒤에 1이 올 때, 1 뒤에 0이 올 때
- index == nums.length - 1 일 때 -> 1일 때, 0일 때
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int max = 0;
int count = 0;
for(int i = 0; i < nums.length; i++) {
if(i < nums.length - 1) {
if(nums[i] == 1 && nums[i + 1] == 1 || nums[i] == 1 && nums[i + 1] == 0) {
count++;
} else {
if(count > max) {
max = count;
count = 0;
}
}
} else {
if(nums[i] == 1) {
count++;
}
if(count > max) {
max = count;
count = 0;
}
}
}
return max;
}
}
이렇게 푼 후 인터넷 서칭을 한 후 너무 어렵게 풀었다는 것을 깨달았다...
그냥 1일 때 count 올려주고 0일 때 count를 초기화 시켜주면 되었다..
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int max = 0;
int count = 0;
for(int i = 0; i < nums.length; i++) {
if(nums[i] == 1) {
count++;
if(count > max) {
max = count;
}
} else {
count = 0;
}
}
return max;
}
}
길이부터 확 줄어든 코드를 볼 수 있었다.
너무 어렵게 생각하지 말자!