본문 바로가기

알고리즘11

문자열에서 숫자를 모두 찾아 더한 뒤에 해당 값을 문자열의 길이로 나눈 값을 정수로 반올림하여 리턴하기 📜 문제 문자열을 입력받아 문자열에서 숫자를 모두 찾아 더한 뒤에 해당 값을 (숫자와 공백을 제외한 나머지) 문자열의 길이로 나눈 값을 정수로 반올림하여 리턴해야 합니다. ⚠️ 주의사항 - 빈 문자열을 입력받은 경우, 0을 리턴해야 합니다. - 숫자(digit)는 연속해서 등장하지 않습니다. ✍🏻 내 풀이 function numberSearch(str) { // 입출력 예시 // 'Hello6 9World 2,' // 숫자: 6+9+2 = 17, 문자열 길이: 10 (숫자 공백 제외) // 17 / 10 = 1.7 -> 반올림해서 2 // 예시 숫자를 선언 const digits = '0123456789'; // 만약 str이 빈 문자열이라면 if (str === '') { // 0을 리턴 return .. 2023. 4. 25.
아이소그램인지 여부를 리턴하기 📜 문제 문자열을 입력받아 아이소그램인지 여부를 리턴해야 합니다. 아이소그램(isogram)은 각 알파벳을 한번씩만 이용해서 만든 단어나 문구를 말합니다. ⚠️ 주의사항 - 빈 문자열을 입력받은 경우, true를 리턴해야 합니다. - 대소문자는 구별하지 않습니다. ✍🏻 내 풀이 function isIsogram(str) { // 대소문자 구분을 없애기 위해 문자를 소문자로 바꿔주는 새로운 문자를 할당하는 변수 let newStr = str.toLowerCase(); // true와 false를 나타낼수 있는 result변수를 선언 let result = true; // str의 길이가 0이면 if(str.length === 0){ // result = true를 반환 return result; } for.. 2023. 4. 5.
num1을 num2로 나눈 나머지를 리턴하기 📜 문제 두 수(num1, num2)를 입력받아, num1을 num2로 나눈 나머지를 리턴해야 합니다. ⚠️ 주의사항 - 나눗셈(/), 나머지(%) 연산자 사용은 금지됩니다. - 0은 어떤 수로 나누어도 나머지가 0입니다. - 어떤 수도 0으로 나눌 수 없습니다. 이 경우 'Error: cannot divide by zero'를 리턴해야 합니다. ✍🏻 내 풀이: for문 사용 function modulo(num1, num2) { let result = 0; // 만약 num2가 0이면 if (num2 === 0) { // 'Error~'를 리턴 return 'Error: cannot divide by zero' } // num2 * i = num1 for (let i = 0; i < num1; i++) .. 2023. 4. 4.
각 요소들이 그 이전의 요소들의 합보다 큰지 여부를 리턴하기 📜 문제 수를 요소로 갖는 배열을 입력받아 각 요소들이 그 이전의 요소들의 합보다 큰지 여부를 리턴해야 합니다. ⚠️ 주의사항 - boolean 타입을 리턴해야 합니다. - arr[i]는 arr[0]부터 arr[i-1]까지의 합보다 커야 합니다. ✍🏻 내 풀이 function superIncreasing(arr) { // 초기값 설정 let sum = arr[0]; // 1번째 인덱스부터 반복해서 더해주다가 for (let i = 1; i < arr.length; i++) { // sum이 다음 인덱스보다 크거나 같다면 if (arr[i] 2023. 3. 31.
2차원 배열에서 특정 문자열의 위치정보를 요소로 갖는 배열 리턴하기 📜 문제 2차원 배열(배열을 요소로 갖는 배열)을 입력받아 'B'의 위치 정보를 요소로 갖는 배열을 리턴해야 합니다. ⚠️ 주의사항 - arr, arr[i]의 길이는 다양하게 주어집니다. - 항상 한 개의 문자열 'B'가 존재합니다. ✍🏻 내 풀이 function findBugInApples(arr) { // 문자열의 행을 순회 for(let i = 0; i < arr.length; i++) { // 문자열의 열을 순회 for(let j = 0; j < arr[i].length; j++) { // 해당 행열에 B가 있다면 if (arr[i][j] === 'B') { // 인덱스 리턴 return [i, j]; } } } } 💡 알아두면 좋을 개념 중첩 반복문 (중첩 for문)을 활용 for(let i =.. 2023. 3. 29.
연속된 한자리 홀수 숫자 사이에 - 를 추가한 문자열을 리턴하기 📜 문제 문자열을 입력받아 연속된 한자리 홀수 숫자 사이에 '-'를 추가한 문자열을 리턴해야 합니다. ⚠️ 주의사항 0은 짝수로 간주합니다. ✍🏻 내 풀이: parseInt( )로 정수 반환 function insertDash(str) { let newStr = str.charAt(0); // 문자열 순회 후 인덱스 단위로 쪼개기 for(let i=1; i 2023. 3. 27.
문자열에 등장하는 두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴하기 📜 문제 문자열을 입력받아 해당 문자열에 등장하는 두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴해야 합니다. ⚠️ 주의사항 - 두 칸을 초과하는 공백은 존재하지 않는다고 가정합니다. ✍🏻 내 풀이 : 직전 공백 여부 판단하는 변수 선언 function convertDoubleSpaceToSingle(str) { // 빈 문자열을 입력받은 경우, 빈 문자열 리턴하는 결과값 선언 let result = ''; // 각 문자 직전 공백 여부 판단하는 변수 선언 let beforeSpace = ''; // for loop로 해당 문자열 길이만큼 순회해서 for (let i = 0; i < str.length; i++) { // 직전 문자가 공백이고, 현재 문자도 공백인 경우 (즉, 현재 문자가 두 .. 2023. 3. 23.
문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴하기 📜 문제 문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 합니다. ⚠️ 주의사항 - 단어는 공백으로 구분합니다. - 연속된 공백이 존재할 수 있습니다. - 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. ✍🏻 내 풀이 function letterCapitalize(str) { // 입력: str // 출력: 문자열을 구성하는 각 단어들의 첫 글자가 대문자로 된 문자열 리턴 // 비어있는 배열을 만들고, 전달받은 문자열을 space를 기준으로 각 단어로 잘라, 배열에 저장 let words = str.split(' '); // 위의 배열을 문자열 길이까지 for loop를 돌려 for (let i = 0; i < words.length; i++) { // 각 .. 2023. 3. 21.
순서가 뒤집힌 문자열을 리턴하기 📜 문제 문자열을 입력받아 순서가 뒤집힌 문자열을 리턴해야 합니다. ✍🏻 내 풀이: for loop 활용 function firstReverse(str) { // 입력: str // 출력: 순서가 뒤집힌 문자열 // 새로 생성될 문자열을 담을 빈 문자열 만들기 let result = ''; // for loop) 반복문의 시작점은 문자열의 마지막 문자의 인덱스인 str.length -1임 // i가 0보다 크거나 같은 코드는 반복적으로 수행되고, 이때마다 i의 값을 줄임 for (let i = str.length -1; i >= 0; i--) { result = result + str[i]; // or result += str[i]; } // 반전된 문자열을 반환 return result; } ✍🏻 또다.. 2023. 3. 21.
문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴하기 📜 문제 문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴해야 합니다. ⚠️ 주의사항 - 단어는 공백 한 칸으로 구분합니다. - 연속된 공백은 없다고 가정합니다. - 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. ✍🏻 내 풀이 function firstCharacter(str) { // 입력: str // 출력: 문자열을 구성하는 각 단어의 '첫 글자'로 이루어진 문자열 // 빈 문자열을 입력받은 경우, 빈 문자열을 리턴 if (str === '') { return ''; } // 비어있는 배열을 만들고, 전달받은 문자열을 space를 기준으로 각 단어로 잘라, 배열에 저장 let words = str.split(' '); let result = ''; // 모.. 2023. 3. 21.
2의 거듭제곱인지 여부를 리턴하기 📜 문제 수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다. ⚠️ 주의사항 - 반복문(while)문을 사용해야 합니다. - 2의 0승은 1입니다. - Number.isInteger, Math.log2, Math.log 사용은 금지됩니다. ✍🏻 내 풀이 function powerOfTwo(num) { // 입력: num // 출력: 2의 거듭제곱인지 여부 boolean 타입 리턴 // 주의: while문 사용, 2의 0승은 1 // num이 1이면 무조건 true if (num === 1) { return true; } // num이 홀수면 무조건 false if (num % 2 === 1) { return false; } // 2를 거듭제곱해서 비교할 수의 초기값은 2 let poweredNum =.. 2023. 3. 21.