오늘은 여러 기업의 코딩테스트를 준비하면서, 연습할겸 코딩테스트 문제를 풀어보았다.
가장 눈에 들어온 것이 문제 제목이 귀여운 옹알이라는 녀석이었는데, 문제도 참 귀엽다.
말그래도 아이가 말할 수 있는 단어를 하나하나 분리하여 아이가 말을 할 수 있는지에 대한 판단 여부를 출력하는 문제이다. 처음에는 해당 babbling 각 배열 요소에 아이가 말할 수 있는 단어가 포함이 되어있는지를 확인을 하였다. 정상적으로 결과 값이 출력되는 것을 확인할 수 있었으나, 추가적으로 `wyeoo`와 같이 사이에 `ye`를 포함하게되고 이는 또 `woo`로 줄여져 카운팅되는 문제점을 확인할 수 있었다.
이를 해결하기 위해 기존 반복문 안에 해당 단어의 인덱스를 찾고, 그 인덱스가 0으로 시작하는 것이 아니면 카운팅 되지 않는 것으로 로직을 설계하였고 이렇게 하면 1번에서 마주하는 사이 단어를 먼저 지우고 지워진 단어에서 추가적으로 또 지워지는 과정이 해결이 된다.
1번 로직을 해결했다면, 문제는 또 2번에서 발생을 한다. 2번에서 인덱스가 0일때 단어를 지워야하기 때문에 아이가 말할 수 있는 단어를 순차적으로 지우게 되는데, 이때 배열을 한번만 돌기 때문에 `aya(1) - ye(2) - woo(3) - ma(4)`와 같이 배열을 구성하였다면 2번 테스트케이스에서는 `yemawoo = ye(2) - ma(4) = woo` 3번을 건너뛰어 단어를 지우게 된다.
이를 해결하기 위해 반복문 안에 map 함수를 사용하여 해당 아이템을 한번 더 최종적으로 지워주는 과정을 시도하였고, 원활하게 테스트케이스와 기타 반례 케이스들에 대해 해결을 할 수 있었다.
function solution(babbling) {
const canSpeak = ['aya', 'ye', 'woo', 'ma'];
let answer = 0;
for (let j=0; j<babbling.length; j++) {
for (let i=0; i<babbling.length; i++)
{
canSpeak.map((item) => {
if (babbling[j].includes(item)) {
if (babbling[j].indexOf(item) === 0) {
babbling[j] = babbling[j].replace(item, '');
if (babbling[j] == "") {
answer += 1;
}
}
}
});
}
}
return answer;
}
'개발적인 > 알고리즘' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (0) | 2022.09.16 |
---|---|
[백준] 1931번 (0) | 2022.05.08 |
[백준] 11047번 (0) | 2022.05.06 |
[백준] 11399번 (0) | 2022.05.06 |
[백준] 2839번 (0) | 2022.05.06 |
댓글