오늘 풀었던 문제 중 헷갈리는 문제 or 답을 봐도 모르는 문제에 대해 오답노트를 작성하려고 한다.
let result = ''
오늘 코플릿에서 빈 문자를 초기화 시키는 작업을 자주 했다.
반복문을 통해 나온 결과를 result에 넣어 출력해야하기 때문이다.
function makeMultiplesOfDigit2(num1, num2) {
// TODO: 여기에 코드를 작성합니다.
// makeMultiplesOfDigit2(8, 12);
//8 9 10 11 12 중 2의 배수 개수 출력 : 8 10 12(3개)
let count = 0;
let start = num1;
let end =num2;
if(num1 > num2){ // 왼쪽 값이 더 클 수 있기 때문에 서로 switch를 해줘야 한다.
start = num2;
end = num1;
}
if(start === 0){
start =1; // 1로 초기화시키면 for문에서 2의 배수가 아니기 때문에 count는 0이 된다.
}
for(let n =start; n<=end; n++){
if(n% 2=== 0){
count += 1
}
}
return count
}
function getMaxNumberFromString(str) {
// TODO: 여기에 코드를 작성합니다.
let result = 0
for (let n = 1; n<=str.length; n++){
if(parseInt(str[n]) > result){
result = str[n]
}
}
return String(result);
}
parseInt()를 쓸 생각을 못했다. 가장 큰 값을 찾기 위해서는 문자열을 숫자로 바꿔주는 작업이 필요하고, 문자열 길이만큼 반복하기 때문에 result보다 큰 값을 발견하면 그것이 최댓값이 되는 것이다.
function replaceAll(str, from, to) {
// TODO: 여기에 코드를 작성합니다.
let result = ''
for (let n = 0; n<str.length; n++){
if(str[n]===from){
result += to //변수 result에는 +to가 되어야 한다.
}
else {
result += str[n]
}
}
return result
}
이해가 되었다.
result += to처럼 쓰는 이유는 만약 문자열에서 from이 발견되면 to를 넣어 문자를 바꿔줄 수 있다.
Math.pow, 거듭제곱 연산자를 사용하지 않고 반복문을 통해 문제를 풀어야 한다.
result *= base
그렇다.
result =1; 로 초기화 시켜 base 값을 exponent만큼 반복하면 되는 것이였다.
(나는 Math.pow 쓰는 방법만 알았다..)
function listPrimes(num){
let result = '2' // 2는 무조건 소수이기 때문에 2부터 시작
for(let i = 3; i <= num; i=i+2) { //모든 짝수는 소수가 아니므로 홀수만 더해서 확인
let isprime = true; // 반복문안에 소수가 맞는지 값을 담아줄 변수를 선언해주고, 소수가 아니라면 false로 바꿔준다
for(let j = 2; j < i; j++){ // num을 나눌 숫자 j 를 반복한다
if(i%j === 0){ // i가 j로 나누어 떨어지면 1과 자기자신 이외의 약수가 있으니 소수가 아니다
isprime = false; // 소수가 아닌걸 확인하면 그 뒤까지 돌아볼 필요가 없으니 break문로 끝내주면 된다.
break;
}
}
// 안의 조건문을 끝내고 나왔고 소수가 아니면 false로 바뀌었다
// isprime true라면 소수이니 result에 넣어준다
if(isprime === true){
result += `-${i}`; // result = result + '-' + i; 와 동일
}
}
return result
}
여기서 가장 중요한 점은 소수가 아니면 false로 바뀌게 되어 true일 때만 출력하게 된다.
result = result + str[j];
let output = makeMarginalString('abc');
console.log(output);
✨ 만약 console.log(result = str[j]);를 출력하게 되면
'a','a',
'b','a', 'b',
'c','c'
가 출력된다.
✨ console.log(result = result + str[j])를 출력하게 되면
'a','aa','aab','aab', 'aaba','aabab','aababc','aababc'
결과적으로 'aababc' 출력된다.
사실 마지막 출력과정만 봐도 이해가 안될 수 있다.
실제 사람이 a를 추가하면 a가 따라오고, b를 적으면 b가 따라와서 ab가 되고, 마지막으로 c를 적으면 c가 따라와서 abc가 된다.