문제
문제 링크 : Longer Contiguous Segments of Ones than Zeros
풀이
var checkZeroOnes = function(s) {
if(s.length === 1) {
return s[0] === '0' ? false : true
}
let oneCount = 0
let zeroCount = 0
let oneStartIdx = 0
let zeroStartIdx = 0
let current = s[0]
for(let i=0; i<s.length; i++) {
if(s[i] !== current) {
current = s[i]
if(s[i] === '0') {
zeroStartIdx = i
oneCount = Math.max(oneCount, i-1-oneStartIdx)
} else {
oneStartIdx = i
zeroCount = Math.max(zeroCount, i-1-zeroStartIdx)
}
}
if(i === s.length-1) {
s[i] === '0'
? zeroCount = Math.max(zeroCount, i-zeroStartIdx)
: oneCount = Math.max(oneCount, i-oneStartIdx)
}
}
return zeroCount < oneCount
};
- 연속된 1과 연속된 0을 구하기 위해 카운트할 변수, 시작점 인덱스 변수들을 각각 만들고
- 조건을 통해 카운트와 시작점을 바꾸는 방식의 풀이
- Runtime 53 ms, Memory 42.71 MB
다른 풀이
var checkZeroOnes = function(s) {
let maxOnes = 0
let maxZeros = 0
let ones = 0
let zeros = 0
for (let i = 0; i < s.length; i++) {
if (s[i] === '1') {
ones++
zeros = 0
maxOnes = Math.max(maxOnes, ones)
continue
}
zeros++
ones = 0
maxZeros = Math.max(maxZeros, zeros)
}
return maxOnes > maxZeros
};
- 첫번째 풀이와 같은 방식의 풀이지만 좀 더 간결한 방식
- Runtime 52 ms, Memory 42.45 MB