23.04.07. JS 기본 문법 연습
강의 연습 문제 풀이
문제 1.
대문자와 소문자가 섞여있는 문자열 s가 주어집니다.
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요.
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.
단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
- 생각의 흐름
먼저 문자열 s를 인자로 받는 함수를 만들고, 문자열을 요소로 값을 참조하여 for문을 돌리고, 각 문자를 lower case로 변환해서, p인 경우와 y인 경우에 해당하는 경우 count하고, for문 종료하고 p counter와 y counter의 값을 비교한 것을 반환하자.
- 코드
let s = "afsyd"
function comparePY(str) {
let pCount = 0
let yCount = 0
for (let single of str) {
if (single.toLowerCase() === "y") {
yCount++
} else if (single.toLowerCase() === "p") {
pCount++
}
}
return yCount === pCount
}
- p와 y counter 변수를 미리 선언하는 것을 까먹었다.
- for ~ of ~ 와 for ~ in ~ 의 차이를 다시 한번 확인. of는 배열에 대한 것만. in은 객체의 property를 참조(배열도 객체로, 0, 1, 2, 3 ...을 참조)
- string의 method에는 toUpperCase()와 toLowerCase()가 있다.
문제 2.
어떤 정수들이 있습니다.
이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다.
실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
- 생각의 흐름
absolutes 배열과 signs 배열이 우선 같은 길이인지 검사하고, 같지 않으면 에러 발생. 같다면, 합계 변수를 선언하고, for ~ in ~ 으로 배열의 index를 이용해서 절대값과 sign의 boolean을 +1과 -1로 삼항연산자로 변환값을 곱해주고, 합계 변수에 += 으로 누적하고, for 문이 끝나면 합계변수를 반환하자.
- 코드
function solution(abs, signs) {
if (abs.length !== signs.length) {
throw new Error("ElementLengthUnmatched")
}
let sum = 0
for (let i in abs) {
sum += abs[i] * (signs[i] ? 1 : -1)
}
return sum
}