1번 문제 풀이
1) 구조 생각해보기
문자열 s가 입력됨
s에서 p나 y가 0개라면 answer = 'true'
p와 y의 개수가 같다면 answer = 'true'
다르다면 answer = 'false'
2) p나 y의 개수를 셀 방법 구상하기
문자열에서 특정문자의 개수를 알아내는 방법이 뭘까?
문자열을 배열로 만들고 배열의 특정 요소를 찾는 메서드를 활용하면 될 것 같다
문자열을 배열로 만드는 법엔 ...연산자, Array.from(), 또는 split() 등이 있다
안 해본 방법인 Array.from()을 활용해보자
let str = "Hello!"
/* ...연산자 활용 */
let array1_str = [...str];
console.log(array1_str); // 반환 : ["H", "e", "l", "l", "o", "!"]
/* Array.from() 활용 */
let array2_str = Array.from(str);
console.log(array2_str); // 반환 : ["H", "e", "l", "l", "o", "!"]
/* split() 활용 */
let array3_str = str.split("");
console.log(array3_str); // 반환 : ["H", "e", "l", "l", "o", "!"]
3) 각각의 개수를 비교할 방법 구상하기
배열로 만든 문자열s에 반복문을 적용해서 p나 y가 발견될 때마다 개수를 표현할 변수에 1을 더해줘보자
countP와 countY라는 변수를 선언하고 초기값으로 0을 할당,
대소문자 구분 없이 세야하니 ||연산자를 활용해 둘 다 체크해주자
let countP = 0;
let countY = 0;
let array_s = Array.from(s);
for (let i = 0; i < array_s.length; i++) {
if (array_s[i] === 'p' || array_s[i] === 'P') {
countP++;
} else if (array_s[i] === 'y' || array_s[i] === 'Y') {
countY++;
}
}
4) 조건문을 통해 반환할 answer 값 설정하기
개수가 같을 때도 true고 p나 y가 아예 없을 때도 true라서 현 문제에서 두 조건을 분리할 필요는 없지만, 명시적으로 짜기 위해서 굳이 분리해주자. case문으로 다시 연습해봐도 좋겠다
if (countP === 0 && countY === 0) {
answer = true;
} else if (countP === countY) {
answer = true;
} else {
answer = false;
}
다른 풀이와 비교 후 느낀 점
숙련자들은 "단 한 줄"로 코드가 끝나더라.... 메서드의 활용법을 숙지해야할 필요성을 팍팍 느꼈다.
특히 reduce()메서드를 활용하는 방식이 인상 깊던데, 활용도가 높은 메서드일수록 완벽히 이해하기가 어려운 거 같다. 자주 보고 자주 쓰며 연습해보자!
2번 문제 풀이
1) 구조 생각해보기
최종 배열의 합을 구하기 전에, 그 최종 배열을 우선 완성시켜줘야겄다.
signs 배열의 요소들을 바탕으로 absolutes 배열의 요소들에 부호를 추가시켜준 새 배열을 만들어보자
2) 새로운 정수들을 담을 배열을 만들고, 반복문을 통해 배열에 요소들을 채워주기
배열은 또 써야하니 전역 변수로 선언해주고, 총합을 담을 변수도 미리 선언해주자.
합을 담을 변수에 초기값 0을 할당시켜주지 않으면, 이따가 수많은 NaN을 만날 수 있다...
let Nums = [];
let sum_Nums = 0;
이제 반복문을 통해 signs 배열의 요소들을 비교해가며 절대값을 정수들로 바꿔주고, 그 결과를 최종 배열에 추가해주자
absolutes와 signs 배열의 길이는 동일하니 조건식에 뭐가 들어가도 상관 없고, 물음표 연산자 연습할 겸 활용해 보았다
for (let i = 0; i < absolutes.length; i++) {
let num;
(signs[i]) ? num = absolutes[i] : num = -1 * absolutes[i];
Nums.push(num);
}
3) 새로운 배열 속 요소들의 총합 구하기
역시 반복문을 활용해볼 건데, 배열이니까 관련 메서드인 forEach()를 써먹어보자
Nums.forEach(function(item) {
sum_Nums += item;
});
answer = sum_Nums;
다른 풀이와 비교 후 느낀 점
지금 수준에선 모든 단계를 하나하나 구현하고 있다면, 숙련자들은 결과가 맞다면 더 짧은 길을 택하고 있었다.
특히 굳이 부호를 다시 부여해서 그걸 더해주는 것 보다, 어차피 총합 구할 거니까 바로바로 더하고 빼주는 방식이 참 인상 깊었고, 나도 열심히 훈련해서 그런 효율적인 알고리즘을 떠올릴 수 있는 사고력을 얻고 말 겨...
'JS 공부' 카테고리의 다른 글
JS문법종합반 2주차 과제 (0) | 2024.11.05 |
---|---|
JS문법종합반 정리 1주차 02 - 반복문, 생성자함수 통한 객체 생성, 배열 관련 메서드 (0) | 2024.11.04 |
JS문법종합반 정리 1주차 01 - 자료형 보충, 문자열 관련 메서드, 형 변환, 삼항 연산자, 객체 관련 메서드 (0) | 2024.11.03 |
웹 UI개발 기초강의 정리 02 (1) | 2024.10.28 |
웹 UI개발 기초강의 정리 01 (0) | 2024.10.27 |