1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 문자열 s에 있는 모든 숫자를 전부 같게 만들 때 해야 하는 행동의 최소 횟수를 구하라
- 주어진 자료는 무엇인가?
- s = 0과 1로만 이루어진 문자열
- 연속된 하나 이상의 숫자를 뒤집을 수 있다.
- 뒤집기 = 0을 1로 뒤집거나 1을 0으로 뒤집는다
2. 계획
- 0이 연속중인 경우와 1이 연속중인 경우 각각 카운트를한다.
- 카운트가 더 적은 숫자의 카운트 값을 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (s) => {
// 0이 연속중인 경우와 1이 연속중인 경우 각각 카운트를한다.
let zeroCount = 0;
let oneCount = 0;
for (i = 0; i < s.length; i++) {
if (s[i] === '0' && s[i + 1] !== '0') {
zeroCount += 1;
}
if (s[i] === '1' && s[i + 1] !== '1') {
oneCount += 1;
}
}
// 카운트가 더 적은 숫자의 카운트 값을 리턴한다.
return zeroCount > oneCount ? oneCount : zeroCount
}
test('reverse', () => {
expect(solution('0001100')).toEqual(1);
expect(solution('1111')).toEqual(0);
expect(solution('00000001')).toEqual(1);
expect(solution('11001100110011000001')).toEqual(4);
expect(solution('11101101')).toEqual(2);
});
4. 반성
- for문을 사용하지 않고 문자열을 쪼개서 배열에 담은 후 배열의 길이가 더 짧은 값을 리턴해보았다.
const solution = (s) => {
const zero = s.split('1').filter((it) => it !== '').length;
const one = s.split('0').filter((it) => it !== '').length;
return Math.min(zero, one)
}
댓글