코플릿 [반복문] 복기

usreon·2021년 3월 22일
2

코플릿

목록 보기
2/2
post-thumbnail

04_factorial

수(num)를 입력받아 factorial(n) 값을 리턴해야 합니다.

  • 입력 : number타입의 정수(num>= 1)
  • 출력 : number타입을 리턴해야 합니다.
  • 주의 : for문 사용, factorial(0)=1, 음수 입력은 들어오지 않습니다.

처음 작성한 코드

function factorial(num) {
  for(let i=1; i<=num; i++){
    num = num * i;
  }
}

내가 처음에 쓴 굉장히 말도 안되는 코드
0부터 3까지의 합을 구할 때 어떻게 했는지 생각해보자

let sum = 0;
for(let i = 0; i <= 4; i++){
sum = sum + i;
} 

즉, 원래 문제로 돌아가서, num 과 i를 곱하는 게 아니다
num은 내가 1부터 num까지의 곱을 알고자 할 때 쓰는 파라미터이다.

만약 num이 4라면

? = ? * 1
? = ? * 2
? = ? * 3
? = ? * 4

를 해주는 것이다.

하지만 우리에게 주어진 건 num과 i밖에 없다
어떻게 해야 될까?

변수를 선언하여 값을 할당해준다

수정한 코드

function factorial(num){
  let sum = 1; 
  for(let i=1; i<=num; i++){
    sum = sum * i
  }
  return sum
}

05_repeatString

문자열과 수(num)를 입력받아 반복된 문자열을 리턴해야 합니다.

  • 입력 : string 타입의 문자열, number 타입의 정수 (num >= 0)
  • 출력 : string 타입을 리턴
  • 주의 : 반복문(for)문 사용, 0을 입력받은 경우, 빈 문자열을 리턴

code

function repeatString(str, num) {
  let result = ''; 
  if(num === 0){
    return result; 
  }

  for(let i=1; i<=num; i++){ 
    result = result + str;
  }
  return result;
}
  1. string 타입을 리턴해야 하므로 우선 빈 문자열을 변수에 선언해준다
    let result = '';

  2. 0을 입력받은 경우 빈 문자열을 리턴
    if(num === 0){
    return result;
    }

  3. 입출력예시

let output = repeatString('code', 3);
console.log(output); // --> "codecodecode"

여기서 for문 식을 직접 구현해보자
result = result + str -> 'code'
result = result + str -> 'codecode'
result = result + str -> 'codecodecode'

따라서 for문의 조건식이 i<num;라면 결과값은 "codecode"가 나올 것이다

for (let i=1; i<=num; n++) 이 부분은 정의된 i를 보고 다음에 올 { result = result + str } 이 블록을 몇번 반복할 지 정해주는 부분이다. 그래서 {}안에서 i을 참조하지 않더라도 for문이 이를 알고 있기때문에 반복이 일어날 수 있다.

06_makeDigits

수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열을 리턴해야 합니다.

  • 입력 : number 타입의 정수 (num >= 1)
  • 출력 : string 타입을 리턴

code

function makeDigits(num) {
  let result = '';
  for(let i=1; i<=num; i++){
    result = result + i
  }
  return result;
}

5번 문제를 풀었다면 1분 안에 풀 수 있는 문제다

입출력예시

let output = makeDigits(5);
console.log(output); // --> "12345"

for(let i=1; i<=5; i++) 니까
{result = result + i}를 5번 반복한다

result = result + i // i는 1부터 시작하니까 '1'
result = result + i // '12'
result = result + i // '123'
result = result + i // '1234' 
result = result + i // '12345'

07_makeDigits2

수(num)를 입력받아 1부터 num까지의 정수로 구성된 문자열을 리턴

  • 입력 : number 타입의 정수 (num >= 1)

  • 출력 : string 타입을 리턴

  • 주의 : 반복문(while)문을 사용,
    숫자(number string) 사이를 '-'로 구분 ex)'1-3-5-7-9'

처음 작성한 코드

function makeDigits2(num) {
  let result ='',
  i= 1; 

  while(i<=num){
    result = result + i +'-'
    i++;
    }
    return result;
}

num이 5일 때 결과값은 '1-2-3-4-5-'가 나왔다.
그래서 마지막 5뒤에 있는 -를 빼주기 위해 '-' 자리를 옮겨
result = result + '-' + i 로 써주니까
'-1-2-3-4-5'로 나왔다.
result가 빈 문자열로 시작하니 '-'부터 시작한 것이다.

그럼 애초에 result 값이 '1'이고 i의 값이 2라면?

라는 생각에서 시작하여 올바른 코드를 완성하였다.

수정한 코드

function makeDigits2(num) {
  let result ='1',
  i= 2; 

  while(i<=num){
    result = result +'-'+ i 
    i++;
    }
    return result;
}

i++의 위치가 result = result +'-'+ i 보다 선행되어선 안된다.
그렇게 되면 '1-3-4-5...' 가 된다.
이유는 컴퓨터가 코드를 읽는 순서를 생각해보면 쉽다.

08_makeOddDigits

수(num)를 입력받아1을 포함하여 num개의 홀수로 구성된 문자열을 리턴해야 합니다.

  • 입력 : number타입의 정수(num>= 1)
  • 출력 : string타입을 리턴해야 합니다.
  • 주의 : while문을 사용해야 하며, 숫자 사이의 구분은 없습니다.

처음 작성한 코드

function makeOddDigits(num) {
  let result = '',
  i=1;

  while(i<=num){
    result = result + i   
    i = i+2;
  } return result;
}

이렇게 되면 5를 입력받았을 때 '135'로 나온다.
i = i+2 라는 것 때문이다.

그럼 i대신 뭘 넣어주면 되지 않을까?

수정한 코드

function makeOddDigits(num) {
  let result = '',
  i=1,
  j=0;
  
  while(j<num){
    result = result + i
    i = i+2;
    j++
    } return result;
}
profile
할 수 있다는 생각이 정말 나를 할 수 있게 만들어준다.

관심 있을 만한 포스트

0개의 댓글