한 걸음씩
[프로그래머스][JS] 옹알이 (1) ✅ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120956
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(babbling) {
var answer = 0;
const arr = ['aya', 'ye', 'woo', 'ma']
for (let b of babbling){
let speaking = 0
for (let a of arr){
// index를 찾지 못하는 경우 -1를 반환
if (b.indexOf(a) !== -1){ // 단어b에 a가 존재하면
speaking += a.length // a길이를 더하고
}
}
if (speaking === b.length){ // 단어 b의 반복이 끝나면 speaking과 b의 길이를 비교하여 계산
answer++
}
}
return answer;
}
b가 'ayaye'일 때,
arr = ['aya', 'ye', 'woo', 'ma']
'ayaye'.includes('aya') → 0
'ayaye'.includes('ye') → 0
'ayaye'.includes('woo') → -1
'ayaye'.includes('ma') → -1
-1인 경우에는 if문을 통과하지 못하므로 건너뛴다
그렇다면 -1이 아닌 수가 나오면 arr 배열의 각 단어 a의 길이를 speaking에 누적하여 더해주는데
'ayaye'.includes('aya') → 0 → speaking = 3
'ayaye'.includes('ye') → 0 → speaking = 5
여기까지가 babbling 배열에서 첫 번째 단어 'ayaye'의 한 사이클이다.
다음 단어로 넘어가기 전에 b의 길이와 speaking의 수를 비교하여 같다면 answer에 +1을 하고
여기서 b의 길이와 speaking의 수가 같아야 answer에 +1을 하는 이유는 문제에서 arr 배열에서의 문자로만 조합하고 최대 1번만 사용하여 단어를 만드는 게 요구조건이기 때문에 두 수가 다르다면 문제의 조건을 만족하지 못하게 되는 것이다.
그리고 다음 단어로 넘어가 위의 과정을 반복한다.
리뷰
이 문제는 처음에 문자를 다 쪼개서 접근을 하려다가 방법이 잘못된 것 같아서
질문하기에 있는 코드를 참고했는데 indexOf 메서드를 사용한 것을 보았다.
indexOf메서드는 인덱스를 찾을 때만 사용해 봤지 문자열을 찾을 때는 사용해 본 적이 없어서 생각조차 하지 않았다.
왜 단어의 길이를 더하는지, 왜 단어의 길이로 비교하는지에 대해 코드를 하나씩 읽어보니까 이해가 됐다.
어떻게 단어의 길이를 더해서 비교할 생각을 한 건지 진짜 신기하다... 혼자서는 생각하지 못할 코드였다.
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 전화번호 목록 (0) | 2023.08.10 |
---|---|
[프로그래머스][JS] 완주하지 못한 선수 (0) | 2023.08.08 |
[프로그래머스][JS] 구명보트 ✅ (0) | 2023.08.03 |
[프로그래머스][JS] 숫자의 표현 ✅ (0) | 2023.08.03 |
[프로그래머스][JS] 조건에 맞게 수열 변환하기 2 ✅ (1) | 2023.07.26 |