코로 넘어져도 헤딩만 하면 그만
[알고리즘]3 거듭제곱, 4_firstCharacter, 5 firstReverse 본문
3. 거듭제곱 여부 확인하기
문제: 수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
- boolean 타입을 리턴해야 합니다.
- 반복문(while)문을 사용해야 합니다.
- 2의 0승은 1입니다.
- Number.isInteger, Math.log2, Math.log 사용은 금지됩니다.
function powerOfTwo(num) {
if (num === 1) {
return true;
}
//1은 2의 0승이니까...
if (num % 2) {
return false;
} //짝수이면 이 조건문을 실행하지 말되 홀수면 false를 리턴.
let powered = 2;
while (powered < num) {
powered = powered * 2;
} //초기값 2로 두고 2를 계속 곱하다가 같아지면 true를 리턴하라.
return powered === num;
}
num%2가 바로 이해가 가지 않았다.
처음엔 짝수일 때 false를 출력하라는 말인 줄 알았는데, 2로 나눠서 0이 되면 이 조건 자체가 실행되지 않는다는 걸 나중에 깨달았다. 짝수이면 실행하지 말고, 홀수일 때만 false를 리턴하라는 뜻이다. 이렇게 조건을 걸어줄 수도 있구나...
4. 문자열의 첫번째 단어로 이루어진 문자 만들기
문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴해야 합니다.
조건:
- 단어는 공백 한 칸으로 구분합니다.
- 연속된 공백은 없다고 가정합니다.
- 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
function firstCharacter(str) {
// 단어는 공백 한 칸으로 구분합니다.
// 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
// 연속된 공백 없음, string 리턴
// split으로 공백 기준 잘라 배열로 만들어준다.
// 배열의 첫글자만 따서 문자열에 넣어주기
if (str.length === 0) {
return '';
}
let arr = str.split(' ');
console.log(arr);
let resultStr = '';
for (i = 0; i < arr.length; i++) {
resultStr = resultStr + arr[i][0];
}
return resultStr;
}
그리 어렵지는 않은 문제였다. split으로 공백이나 , 기준으로도 배열로 잘라낼 수 있다는 걸 이전에 코플릿에서 습득한 상태였기 때문에...
str.split을 하여 빈칸 기준으로 자른 단어들을 배열 하나에 담아준다. 이후 배열 내부의 단어들을 for문으로 순회하며 하나씩 맨 첫글자만 따서 새로운 단어를 만들어주면 된다. 깔끔한 문제.
5. firstReverse
문자열을 입력받아 순서가 뒤집힌 문자열을 리턴해야 합니다.
function firstReverse(str) {
// 문자열로 들어온 str을
//순서를 하나하나 뒤집어서 리턴한다?
//문자열을 배열화시킨다
//이제 이 결과를 .split로 나눠본다
let result = str.split('').reverse().join('');
return String(result);
}
split이 문자열을 배열화 시킨다는 사실을 잊고 잠깐 헤맸다. 또 reverse()와 join('')은 처음 써봐서 당혹했다. 당연히 그런 게 있을 것 같긴 했는데...
배열이기 때문에 마지막에 String로 문자열까지 바꿔줘야 한다는 사실을 잊지 말자.
//result[i]가 result[result.length-1 - i]여야하는 거 아님?
// for(i=0; i<result.length; i++){
// result[i]= result[result.length-1 - i]
// }
사실 처음 작성했던 코드에는 위와 같은 부분이 있었다. for문으로 배열의 index를 바꿔주는 방법이 있을 것도 같은데...
하긴 배열의 순서 뒤집기는 reverse()가 훨씬 간편한 것 같다.
const reverse = [];
for(let i=arr.length-1; i >= 0; i--) {
reverse.push(arr[i]);
}
for 문으로 배열 쉽게 뒤집는 법에 대해 더 찾아본 결과.
'CODE STATES 44 > 데일리 코딩(알고리즘)' 카테고리의 다른 글
[알고리즘]9_ABCheck, 10_insertDash, 11_removeExtremes, 12_findBugInApples (0) | 2023.03.24 |
---|---|
[알고리즘]6 letterCapitalize, 7 convertListToObject, 8 convertDoubleSpaceToSingle (0) | 2023.03.23 |
[알고리즘] 데일리코딩 1~2 (1) | 2023.03.15 |