2시간 이것저것 헤메다가 못 풀어서 선생님 불렀다 ㅠㅠ
무슨 옹알이가 이렇게 어려워!!
주어진 배열
["aya", "yee", "u", "maa", "wyeoo"];
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"];
문제
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
아무튼 이런 문제인데...
정규식을 안쓰고 해볼려다가
사실 정규식 모름
처음에 작성한 답은 산으로 가서 버렸고
그냥 선생님이 알려준 것만 정리..
function solution(babbling) {
let answer = 0;
const validSounds = ["aya", "ye", "woo", "ma"];
babbling.forEach(word => {
let isValid = true;
let usedSounds = {};
for (let sound of validSounds) {
if (word.includes(sound)) {
const idx = word.indexOf(sound);
if (usedSounds[sound] || idx !== word.lastIndexOf(sound)) {
isValid = false;
return;
}
word = word.replace(sound, " ");
usedSounds[sound] = true;
}
}
if (isValid && !word.trim().length) {
answer++;
}
});
return answer;
}
문제 해결을 위해 몇 가지 점을 고려해야 합니다. 먼저, 주어진 문제의 로직을 단계별로 이해해야 합니다. 조카가 발음할 수 있는 단어를 구별하기 위해서는 각 문자열이 'aya', 'ye', 'woo', 'ma' 중 하나를 포함하면서, 각각이 최대 한 번씩만 사용되었는지 확인해야 합니다. 주어진 코드는 이 조건을 완전히 만족시키지 못하고 있습니다.
문제를 해결하기 위한 수정된 접근 방법은 다음과 같습니다:
1. 각 문자열을 순회하며, 'aya', 'ye', 'woo', 'ma' 각각이 최대 한 번씩만 등장하는지 확인합니다.
2. 문자열을 확인할 때, 앞서 언급한 네 발음이 중복 없이 등장하는지 확인하고, 그 순서대로 문자열이 구성되어 있는지 확인합니다.
3. 네 발음이 각각 최대 한 번씩만 등장하고 다른 발음으로 오인될 여지가 없다면, 해당 문자열을 유효한 발음으로 간주합니다.
이 코드는 주어진 각 문자열에 대해 'aya', 'ye', 'woo', 'ma'가 각각 최대 한 번씩만 포함되어 있는지 확인합니다. 또한, 각 발음이 문자열 내에서 중복되지 않고 다른 발음과 겹치지 않게 분리되어 있는지도 검사합니다. 그 결과로, 조카가 발음할 수 있는 단어의 수를 정확하게 계산할 수 있습니다.
1. `usedSounds[sound]`: 이 조건은 현재 검사하고 있는 발음(`sound`)이 이미 단어 내에서 사용되었는지 확인합니다. `usedSounds` 객체는 각 발음이 단어 내에서 사용되었는지 여부를 저장하고 있으며, 발음이 처음 등장하면 해당 발음을 키로 하여 `true` 값을 저장합니다. 따라서, 이 조건이 `true`를 반환한다면, 현재 발음이 이미 단어 내에 한 번 사용되었다는 의미이며, 이는 각 발음이 최대 한 번만 사용되어야 한다는 규칙을 위반하는 것입니다.
2. `idx !== word.lastIndexOf(sound)`: 이 조건은 현재 발음이 단어 내에서 두 번 이상 나타나는지 확인합니다. `indexOf(sound)` 메소드는 주어진 발음이 처음으로 나타나는 인덱스를 반환하고, `lastIndexOf(sound)` 메소드는 주어진 발음이 마지막으로 나타나는 인덱스를 반환합니다. 만약 발음이 단어 내에서 한 번만 나타난다면, `indexOf(sound)`와 `lastIndexOf(sound)`가 반환하는 값이 동일합니다. 그러나 이 두 값이 다르다면, 같은 발음이 두 번 이상 나타난 것이므로, 이 역시 각 발음이 최대 한 번만 사용되어야 한다는 규칙을 위반하는 것입니다.
요약하자면, 이 부분의 코드는 각 발음이 단어 내에서 한 번만 사용되었는지 확인하여, 조카가 발음할 수 있는 규칙에 부합하는지 검증하는 역할을 합니다. 위반 사항이 발견되면, 해당 단어는 유효한 발음으로 간주되지 않습니다.
'algorithm' 카테고리의 다른 글
코테6 - 배열의 유사도 (0) | 2024.03.04 |
---|---|
코테5 - 다음에 올 숫자 (0) | 2024.03.04 |
코테4 - 붕대감기 (0) | 2024.03.02 |
코테2 - 문자열 내 마음대로 정렬하기 (2) | 2024.02.29 |
코테1 - 최소직사각형 (1) | 2024.02.29 |