⚡문제정보
문제를 대충 읽으면 착각하고 구현하기 쉬운 문제였습니다.
예제를 보는 편이 오히려 조금 더 직관적이지 않나 싶네요
x가 등장한 횟수와 x가 아닌 글자가 등장한 횟수가 일치하게 되었을때
정답카운터를 1 올려주면 됩니다.
🙄제한사항
s는 영어 소문자로만 이루어져 있습니다.
🔍접근방법
값을 저장할 변수가... 많이 필요할 것 같다.
1. 정답을 카운팅해줄 변수
2. 기준이 되는 x가 무엇인지 저장할 변수
3. x가 등장한 횟수를 세어줄 변수
4. x외의 나머지가 등장한 횟수를 세어줄 변수
변수만 선언하면 구현 자체는 for문으로 순회하면서 찾으면 쉽게 찾을 수 있을 듯 하다.
🔍나의 풀이
function solution(s) {
let x = s[0]
let xcounter = 1
let another = 0
let answer = 0
if(s.length < 2) {return 1}
for(i=1; i<s.length ; i++) {
if(xcounter == another) {
x = s[i];
answer++;
xcounter = 0;
another = 0;
}
(x == s[i]) ? xcounter++ : another++;
if(i == s.length-1) {
answer++
}
}
return answer
}
코드 설명은
아래에 주석으로 작성했습니다.
function solution(s) {
let x = s[0]
// x값이 무엇인지를 저장할 변수
let xcounter = 1
// x가 등장한 횟수를 세어주기
let another = 0
// x 외의 문자의 등장 횟수를 세어주기
let answer = 0
// 정답 카운팅
if(s.length < 2) {return 1}
// 만약 s의 길이가 1이면 return 1
for(i=1; i<s.length ; i++) {
if(xcounter == another) {
x = s[i];
answer++;
xcounter = 0;
another = 0;
}
//등장 횟수가 같아지면 모든 변수를 초기화하고 answer++
(x == s[i]) ? xcounter++ : another++;
//x와 현재 s[i]를 비교하고 올려줄값을 결정
if(i == s.length-1) {
answer++
}
//for문의 마지막에 도달했을때 무조건 answer ++
}
return answer
정답 반환
}
for문의 마지막에서 answer를 무조건 ++해주는 이유는
두 횟수가 다른 상태에서 문자의 끝에 도달할 경우 answer를 ++해줘야한다는 조건이 있고
두 횟수가 같은 상태인 경우라면 다음 for문에서 검사를 하고 if문으로 증가를 시켜줘야하는데
증가를 시켜주지 못하고 for문이 종결되기때문에 for문의 마지막에는
무조건 answer를 ++해줍니다.
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 3] 베스트 앨범 Javascript (0) | 2023.01.08 |
---|---|
[Programmers Level 2] H-index Javascript (0) | 2022.12.31 |
[Programmers Level 2] 짝지어 제거하기 Javascript (0) | 2022.12.27 |
[Programmers Level 2] 영어 끝말잇기 Javascript (0) | 2022.12.25 |
[Programmers Level 1] 크기가 작은 부분 문자열 Javascript (0) | 2022.12.25 |