문자열을 입력받아 버그('#')의 인덱스를 리턴해야 합니다.
bug# 이 입력되면 3이 리턴되어야함
function findTheBug(word) {
for (let i = 0; i < word.length; i++){
if (word[i] === '#'){
return i
}
}
}
레퍼런스에는 for문 밖에 return undefined도 적혀있었는데, 나는 그걸 적지 않았으나 통과했다
수를 입력받아 0부터 해당 수까지의 합을 리턴해야 합니다.
function sumTo(num) {
let sum = 0;
for (let i = 0; i <= num; i++){
sum = sum + i
}
return sum
}
수를 입력받아 홀수인지 여부를 리턴해야 합니다. (while 문 사용, 나눗셈/나머지 연산자 사용 금지)
나눗셈없이 홀수 여부를 리턴하는게 어려웠다.
생각하구 고민한 결과.. 0보다 크면 -2씩 빼서 0으로 어지면 짝수! 0보다 작으면 +2씩해서 0이 나오면 짝수! 였음
function isOdd(num) {
if (num >= 0){
let i = 0;
while (i < num){
i = i + 2
num - 2 === 0
} return false
}
if (num < 0){
let i = 0;
while (i < num){
i = i + 2
num + 2 === 0
} return false
}
return true
}
실패한 구조문.. 77과 -17이 false 가 나왔다. 아니 지금 보니 모든 수가 false가 나온모양
내 생각에는 num-2가 0이 되었을 때 탈출해서 false를 출력했음 하는거 였는데..
num - 2 ===0 이게 맞나? 해서 2를 i로 바꿨으나 실패
function isOdd(num) {
if (num = 0){return false}
if (num > 0){
let i = 0;
while (i < num){
i += 2
num - i === 1
} return true
}
else if (num < 0){
let i = 0;
while (i < num*-1) {
i += 2
num + i === -1
} return true
}
return false
}
계속 틀리고 있음.. 심지어 출력값이 100이랑 -1000이 틀리니까 이거 뭐 뭐때메 틀리는지 알 수도 없고 ㅠ.ㅠ
디버깅해도 이해가 안가고... 이쯤에서 틀린 기록 한번 더 쓴다..
function isOdd(num) {
if (num = 0){return false}
num = -num
let i = 0;
while (i < num){
i += 2
num - i === 1
return false
}
return true
}
길을 바꿔봤는데, num이 양수일때나 음수일 때나 같다고 설정하고 싶었다.. 실패했지만 ㅜㅜ
while 문에 대해서 더 공부하고,
function isOdd(num) {
if (num < 0){
num = -num
}
let i = 0;
let result = 0;
while (i <= num){
result = i
i = i + 2
}
if (result !== num){
return true
}
return false
}
성공 ㅠㅠ 2씩 계속 더해서 0이 아니고 num 이랑 같아 질 때까지 더하기! 그러면 짝수
function isOdd(num) {
if (num < 0) { // 일단 num이 음수면 양수 취급
num = -num;
}
while (num >= 0) { // num이 0보다 같거나 큰 경우,
if (num === 0) { // num이 0이랑 같다면
return false; // false를 출력한다.
} else if (num === 1) { // num 이 1과 같다면
return true; // true 를 출력한다.
}
// 두 조건을 다 충족하지 않는다면 조건문을 빠져나와서
num = num - 2; // num = num - 2를 반복 실행하다가 0, 1이 되었을 때
} //각각 짝/홀 이므로 false/true 출력
}
레퍼런스는 뺄셈을 이용했다. ㅠㅠ 사람들은 정말 너무 똑똑 하다..
이름에 맞게 자릿수를 다 곱하는 문제 (팩토리얼 구하기)
이거는 2번에서 했던 다 더하는 문제에서 곱하기로 바꾸어서 해결했당
function factorial(num) {
let fac = 1;
for (let i = 1; i<=num; i++){
fac = fac * i
}
return fac
}
문자열과 수를 입력받아 반복된 문자열을 리턴해야 합니다.
let output = repeatString('code', 3);
console.log(output); // --> "codecodecode"
이렇게 된다는 이야기
function repeatString(str, num) {
let result = '';
for (let i=1; i<=num; i++){
result += str
if (num === 0) {
result = '';
}
}
return result
}
처음에 약간 헤맸는데 result += str을 이용해서 해결했다.
그리고 let i = 0으로 놨더니 str을 하나 더 출력했음.
수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열을 리턴해야 합니다.
function makeDigits(num) {
let resultDigits = '';
for (let i =1 ; i <= num; i++){
resultDigits += i
}
return resultDigits
}
한번에 테스트 통과해서 약간 당황...
function makeDigits(num) {
let result = '';
for (let i = 1; i <= num; i++) {
result = result + String(i);
}
return result;
}
레퍼런스 답. 페어분이랑 할때는 이런 방식으로 했었던거 같은데 다시 풀어서 된 걸 이유를 모르겠다리
수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열을 리턴해야 합니다.
let output = makeDigits2(5);
console.log(output); // --> "1-2-3-4-5"
이런 결과가 나와야 한다. 약간 이때 번뜩 든 생각이 일단 기본값을 1로 해놓고 출력을 -num 으로 하면 되겠다 싶었음
function makeDigits2(num) {
let resultDigits = '1';
let i = 2
while (i<=num){
resultDigits = resultDigits + `-${i}`
i++
}
return resultDigits
}
let output = makeOddDigits(3);
console.log(output); // --> "135"
output = makeOddDigits(5);
console.log(output); // --> "13579"
수(num)를 입력받아 1을 포함하여 num개의 홀수로 구성된 문자열을 리턴해야 합니다.
function makeOddDigits(num) {
let oddDigits = '';
let i = 0;
while (i<=num){
if (i % 2 === 1){
oddDigits = oddDigits + String(i)
}
i++
}
return oddDigits
}
처음에는 num 안에 있는 홀수 찾기 식으로 만들어 버림 ㅠ.ㅠ 그게 아니라 홀수 개수를 추출하는건데..
function makeOddDigits(num) {
// 홀수가 나열된 결과를 담아 낼 문자
let oddDigits = '';
// i가 하나씩 올라갈 때마다 홀수 하나씩을 추가할
// 새로운 변수(j:홀수값) 설정
// i가 num와 같아질 때 반복문을 종료한다.
// i가 하나 올라갈 때마다 j가 결과값에 추가
// i는 2개씩 증가
let i = 0;
let j = 1;
while (i<num){
oddDigits = oddDigits + j;
j += 2
i++
}
return oddDigits
}
하나하나 되짚어 가면서 풀었다.
i와 j를 너무 헷갈려해서 ㅠ ㅠ 다음부턴 다른 변수로 해야지 하고 다짐
let output = makeMultiplesOfDigit(7);
console.log(output); // --> "36"
output = makeMultiplesOfDigit(19);
console.log(output); // --> "369121518"
수를 입력받아 1부터 해당 수까지의 수 중에서 3의 배수로만 구성된 문자열을 리턴해야 합니다.
이건 아까 내가 num속에있는 홀수를 뽑아낸 방법처럼 하면 될 거 같다!
function makeMultiplesOfDigit(num) {
let result = '';
for (let i = 1; i<=num; i++){
if (i % 3 === 0){
result = result + i
}
}
return result
}
어렵지 않게 성공. 근데 i = 0부터로 돌렸더니 0369..이런식으로 출력
생각해보니 0나누기 3도 나머지가 0이라서..인듯 ?
let output = makeMultiplesOfDigit2(8, 12);
console.log(output); // --> 3
output = makeMultiplesOfDigit2(12, 8);
console.log(output); // --> 3
나를 애먹였던.. 기억에 남은 문제중 하나
function makeMultiplesOfDigit2(num1, num2) {
let result = 0;
if (num1 === 0){num1 = 1}
if (num2 === 0){num2 = 1}
// num1보다 num2가 큰 경우
if (num1 < num2){
for (let i = num1; i<=num2; i++){
if(i % 2 === 0){
result = result + 1
}
}
// num1보다 num2가 작은 경우
} else if (num1 > num2){
for (let i = num2; i<=num1; i++){
if (i % 2 === 0){
result = result + 1
}
}
// num1과 num2가 같은 경우
} else if (num1 === num2){
for (let i = num1; i<=num1; i++){
if (num1 % 2 === 0){
result = 1
}
}
}
return result
}
처음에 내가 생각했던 방법이다. 일단 num1과 2에 0이 들어올 경우를 가정해
1과 같다고 하고, 그 뒤로는 크기를 비교해가면서 쭉쭉 만들었는데.. 어쩐지 0일 때 값이 안나온다 ㅜㅜ 해서 봤더니
if (num1 === 0){num1 === 1} if (num2 === 0){num2 === 1}
초반에 이렇게 해놨던 거다.. 생각해보니 이상해서 이거 수정하고 제출해서 통과..
근데 레퍼런스 답은 굉장히 간단했다
function makeMultiplesOfDigit2(num1, num2) {
let count = 0;
let start = num1;
let end = num2;
if (num1 > num2) {
start = num2;
end = num1;
}
if (start === 0) {
start = 1;
}
for (let i = start; i <= end; i++) {
if (i % 2 === 0) {
count += 1;
}
}
return count;
}
시작값과 초기값을 지정해주고, num1 이 num2 보다 큰 경우는 반대로 된다 가정해서
반복문에서 start는 작은값, end는 자동으로 큰 값이 되었다.
훨씬 간단하게 start, end 변수로 계산해주었다.
let output = countCharacter('I am a hacker', 'a');
console.log(output); // --> 3
문자열과 문자를 입력받아 문자열에서 문자(letter)가 등장하는 횟수를 리턴해야 합니다.
function countCharacter(str, letter) {
let result = 0
for (let i = 0; i <= str.length; i++){
if (str[i]===letter){
result++
}
}
return result
}
let output = getMaxNumberFromString('53862');
console.log(output); // --> '8'
output = getMaxNumberFromString('4321');
console.log(output); // --> '4'
숫자 문자열을 입력받아 문자열을 구성하는 각 숫자 중 가장 큰 수를 나타내는 숫자를 리턴해야 합니다.
+str.split 이용해서 구해보기
function getMaxNumberFromString(str) {
//string 타입 리턴
//문자열str[i] 이용, 가장 큰 수 찾아 리턴 (숫자 비교)
// 첫번째 문자열이 두번째 문자열보다 작으면
// - 두 번째 문자열과 세 번째 문자열 비교해서 작으면
// - 세 번째 문자열과 네 번째 문자열 비교해서 크면
// - `` 다섯 번째 문자열 ~ 끝까지 비교
// 1 < 2 - 2 < 3 - 3 < 4 - 3 > 5 - 3 < 6 - 6 < 7
// 문자열n과 n다음의 문자열n번째(j)까지 비교
let i = 0;
let j = i + 1
let largest = '';
for (let i = 0; i<=str.length; i++){
if (str[i] < str[j]){
return str[j]
} else if (str[i] > str[j]){
return str[i]
}
}
}
1234를 입력하면 2가 출력.. 2개 이상을 안 간다는 거고 반복문 실해잉 안된다는건데
반복문에 대한 이해가 부족한 거 같다 ㅠ.ㅠ
function getMaxNumberFromString(str) {
if (str === ''){return '0'}
let i = 0;
let j = i + 1
let largest = '';
for (let i = 0; i<str.length; i++){
if (str[i] < str[j]){
largest= str[j]
} else if (str[i] > str[j]){
largest = str[i]
}
}
return largest
}
수정한 코드. 근데 여전히 하나를 출력 못 한다. ㅠㅠ 12375를 출력했는데 왜.. 5가 출력 되는지?
근데 쓰면서 생각했다. 내가 적은 str[i],,가 과연 비교를 할 수 있나? 쟤네 다 숫자여야 비교가 되는데..!
그것도 수정하고 이것저것 수정해서 겨우 찾은 답..
function getMaxNumberFromString(str) {
let max = 0;
for (let i = 0; i<str.length; i++){
if (max < parseInt(str[i])){
max = parseInt(str[i])
}
}
return String(max)
}
이 비교하는 부분에 대한 이해를 확실히 머리에 넣고 가야할 거 같음.. ㅠㅠ
function getMaxNumberFromString(str) {
if (str === ''){return '0'}
var result = str.split('').map(Number)
return `${Math.max.apply(null,result)}`
}
어찌 저찌 해서 됐다.. 이게 맞는지는 모르지만 결과는 나옴!
첫줄은 빈문자열일 때 0 출력하는 거 넣어주고,
str.split을 이용해서 분할하면 문자열로 나오는데, 이걸 숫자로 바꿔주는게 .map(Number)
그리고 그 숫자배열 중에 최댓값 출력하는 함수 Math.max 이용했다.
스트링으로 출력해야 되기 때문에 ${}
사용..
문자열과 두 개의 문자(from, to)를 입력받아, 문자열에 등장하는 특정 문자(from)가 다른 문자(to)로 바뀐 문자열을 리턴해야 합니다.
function replaceAll(str, from, to) {
// 문자열을 탐색해 from 값을 찾는다
// from 과 같은 문자는 to를 넣는다 (result += to)
// from과 다른 문자는 그대로 출력 (result += str[i])
let result = '';
for (let i = 0; i<str.length; i++){
if(str[i] !== from){
result = result + str[i]
} else if (str[i] === from){
result = result + to
}
}
return result
}