5월25일 화요일 til

김병훈·2021년 5월 25일
0

til

목록 보기
4/89

1번문제 수도코드

// 만약 매개변수(anything)에 null을 입력받으면 'null'을 출력한다.
// 그렇지 않고 배열을 입력받으면 'array'를 출력한다
// 둘다 아니면 typeof를 사용해서 매개변수에 입력받은 값이 무엇인지에 따라서 다르게 출력한다.
Array.isArray()를 사용해서 ()안에 매개변수인 anything을 넣어서 배열인지 아닌지 여부를 확인하고 true면 'array'를 리턴하고 아니면 typeof()를 사용해서 ()안에 매개변수 anything을 넣어 입력되는 값에 따라서 'number' , 'string', 'boolean', 'object', 'undefined', 'function', 를 출력하는 걸 알게 되었다.

2번문제 수도코드

// 배열을 입력 받았을 때 첫번째 [0]값을 리턴해야한다.
// 하지만 빈 배열을 입력 받은 경우는 undefined를 리턴해야한다.
return arr[0]만 작성했는데도 , 통과하긴했지만 두번째 수도코드를 작성하지 않았었다. 빈 배열을 입력받은 경우를 if문으로
if(arr.length === 0){
return undefined;
}
라고 추가적으로 작성해줘도 테스트가 통과되었다. 배열이나 문자열 모두 비어있는건지를 알아내려면 .length를 이용하는걸 배운 거 같다.

3번문제 수도코드

//입력받은 배열의 마지막 값(요소)를 리턴해야한다.
//pop메소드를 이용해서 입력받은 마지막 값을 가져온다.
pop method를 이용해서 입력받은 마지막값을 가져오는게 문제 제목이 get으로 시작해서 배열 밖으로 가져오는게 맞는 줄 알았고, 테스트도 통과했지만 reference code는 pop method를 사용하지않고
if(//입력받은 배열의 길이가 0보다 클 때(빈배열이 아닐 때 )){
return //배열[배열의 길이에서 1을 뺀 배열의 element]를 리턴한다.
}
return undefined;
}

이렇게도 작성 할 수 있다.

4번문제 수도코드

// 만약 index가 arr.length보다 크면 'out of index range'를 리턴한다.
// 빈 배열을 입력받은 경우 undefined를 리턴한다.
// 그렇지않으면 입력받은 index에 해당하는 element를 리턴한다.
수도코드는 이렇게 작성했었는데 2번째 수도코드를 가장상단으로 올렸어야했다.
if(//배열의 길이가 0과 같다면)
return undefined;
}else if(//index가 배열의 길이보다 크거나 같으면 ){
return 'out of index range';
}
return //배열의[index]를 리턴한다.
}
여기서 index는 예를들어 arr[1]이면 배열의 0번째 > 1번째(이 element)값을 리턴하는 형식이다. 근데 arr.length보다 크거나 같아야하는 이유는 길이보다 작으면 리턴할 값이 없어서 최소 하나만 입력된 배열의 index는 0이니 같거나 같아야 index에 해당하는 element를 리턴할 수 있는 것이라고 이해했다

5번문제 수도코드

// 배열의 모든 요소들의 합을 저장하는 변수를 선언하고 초기값을 0으로 할당한다.
// 반복문으로 배열의 요소를 하나씩 확인한다.
// 초기화를 시키고 조건문을 만들고 증감문을 만들어서 for문에 대입한다.
// 배열의 자리는 0부터 시작이니까 n = 0; 으로 초기화한다.
// 조건문은 입력받은 n은 arr.length보다 작거나 같을 때 까지 반복한다.
// 증감문을 n을 1씩 더한다.
// (추가)최종값이 저장되어있는 변수는 최종값 + 배열[n]을 해야한다. (til쓰면서 작성한거임 수도코드 쓸 때는 안했음)
// 최종값이 저장되어있는 변수를 리턴한다.
total이라는 변수를 선언하고 모든 elements의 합을 더 한 값을 저장해야하기 때문에 0으로 할당했다.
배열,문자열모두 요소자리(index)는 0부터 시작이니까 n은 0으로 초기화를 해준다.
조건문은 n이 배열의길이보다 크면 값이 없는 곳까지 for문을 돌리기 때문에 필요가 없고 길이는 1부터시작하지만, index는 0부터 시작하기 때문에 같다(=)연산자를 같이 붙이게되면 값이 달라진다. 그래서 n이 배열의 길이보다 작을 때까지를 조건문으로 만든다.
증감문은 1씩 증가시키는 것으로 한다.
근데 처음에 수도코드를 작성할 때에는 바로 최종값이 저장 되어있는 변수를 리턴한다고 했는데, 과정이 없었다.
for문이 실행되면 최종값이 저장되어있는 변수 total에 total 과 배열의index값이 더해진 값을 계속 더하면서 최종값을 저장한다.
그리고 for문이 끝났을 때 최종값이 저장되어있는 total을 리턴한다.

6번문제 수도코드

// 매개변수에 string을 입력 받았을 때 문장으로 구성되어 있는 단어들을 배열로 나눠서 리턴 해야한다.
// 만약 빈 문자열을 입력 받았을 때는 , 빈 배열을 리턴해야한다.
// 그렇지 않으면 split method를 사용해서 문자열을 배열로 나누는 코드를 작성 해야한다.
매개변수 str에 문자열(string)을 입력 받았을 때 문장으로 구성되어 있는 단어들을 배열로 나누어서 리턴한다.
ex) functionname('big yellow cap')
= ['big', 'yellow'. 'cap']
빈문자열을 판별하는 것은 많이 했듯이, 배열과 같이 만약 str/arr.length가 0과 같다면 if(str/arr.length === 0){
return 원하는 값; // 여기서는 빈배열 []; + object는 {}
이 문제의 중요한 포인트는 split method를 사용하는 것인데 , 띄어쓰기 (" ")로 문자열을 구분하여 배열로 바꿀 수 있다고 한다. str.split(" ")
배열 element 사이에 띄어쓰기 (" ") 넣어 다시 문자열을 바꿀 수 있다고하는데 이건 이해가 가지 않는다. 질문해야겠다.str.split(" ").join(" ")

7번문제 수도코드

//(할당)빈 배열을 가지고 있는 변수를 선언한다.
// 빈 문자열을 입력받은 경우 , 빈 배열을 리턴한다.
// 초기화는 0으로 한다.
// 조건문은 n이 str.length보다 작아야한다.
// n은 1씩 증가한다.
// for문이 실행되면 빈 배열 안에 받은 값이 들어가고
// for문이 끝났을 때 모든 값을 저장한 변수를 리턴한다.
6번과 다른점은 string을 입력 받았을 때 문장으로 구성되어 있는 단어들을 배열로 나눠서 리턴 해야했는데 , 7번은 문자열을 구성하는 각 문자를 요소로 갖는 배열로 리턴을 해야한다는 점이다.
그래서 입출력 예시가 functionname('yellow')
= ['y', 'e', 'l', 'l', 'o', 'w']가 된다.
수도코드는 잘 작성 했었다. 도중에 수정했지만 추가적으로 작성한 부분은없다.
첫번째로 변수를 선언하고 빈배열을 할당해준 이유는 string을 입력받고 그 string를 구성하는 문자를 array의 element(요소)로 갖는 것을 출력해야하기 때문에 빈문자열 안에 값을 더해주기 위해서 빈배열을 할당해 준 것이다.
그리고 주의사항대로 빈 문자열을 입력받은 경우는 빈 배열을 리턴하는 코드를 작성했다.
역시 n의 값은 0으로 초기화를 하고 str.length의 값도 0보다 작아야지 가능하다. 그리고 n을 1씩 증감해주는 증감문을 작성했다.
for문이 실행되는 과정을 코드로 작성하는 과정에서 엄청난 시간을 소비했었다.

  • 우선 나의문제는 두가지가 있었다. 첫번째 , word.push를 사용하는 과정에서 내가 배열기초를 배울 때arr.push로 배웠는데 word.push로 코드를 짜는 부분이 이해가 안갔었는데 , word는 빈 배열로 선언을 해줬기 때문에 word.push로 입력하는 것을 받아들인 것 같다. 그리고 두번째 , word.push를 사용하는 방법에서 문제가 있었다. word.push method안에 더해주는 과정(?)이 포함되어 있는데 , 나는 word.push(str/'str') + str[n]등의 코드로 시도를 했었다. about:blank console창에서 위에서 작성한 코드들을 입력해보면서 저렇게 입력했을 때 매개변수에 string값을 입력할 때의 결과값을 보면서 뭐가 문제인지 파악했었다. 페어님은 거의 다왔다고 끝까지 답을 알려주시진 않으셨고 직접 찾을 때 까지 기다려주셨다. 정말 감사했다. 그래서 더 머리에 남는 것 같다. 그래서 이 word.push(str[n])이 실행되는 과정을 다시 생각해보면 어떤 단어가 입력 되었을 때 str의 index별로 더배열로 더해져서 '문자열을 구성하는 각 문자' 가 담긴 값이 배열에 더해진 최종값이 word에 저장되어서 for문이 끝나고 리턴되는 것이다. 근데 push는 Add Elements to Back 뒤에 저장하는 것이고 , unshift는 Add Elements to Front인데 궁금해서 about:blank colsole창에 띄워 봤다.
  • function getAllLetters(str){
    let word = [];
    if(str.length === 0){
    return [];
    }
    for(let n = 0; n < str.length; n++){
    word.unshift(str[n]);
    }return word;
    }
    getAllLetters('yellow')
    (6) ["w", "o", "l", "l", "e", "y"] 이렇게 값이 나왔다.
    word.push(str[n]);로 바꿨을 때는 getAllLetters('yellow')
    (6) ["y", "e", "l", "l", "o", "w"] 로 나왔다.

8번문제 수도코드

// for문을 사용해서 입력된 배열에 있는 숫자를 알아야한다.
// 변수 maxNum을 선언하고 가장 큰 값을 arr[0]으로 할당한다.
// 초기화 : 배열이니까 n = 0으로 초기화해서 처음 값부터 집어넣는다.
// 조건문 : n은 arr.length 보다 작아야한다.
// 증감문 : n을 1씩 증감시킨다.
// 만약 arr[1]이 maxNum보다 크면 , maxNum은 arr[1]이 된다.
>> arr[n]이 maxNum보다 크면 maxNum은 arr[n]이다라고 수정해야한다.

이 문제는 페어님이 조언해주신 코플릿 문자열 9번을 참조하면서 풀었었다.
배열을 입력받아서 가장 큰 요소(element)을 리턴 해야했다.
ex) functionname([1, 5, 3])
= 5
근데 문제점은 문자열 9번 같은 경우는 3개로 지정한 매개변수의 값 중 가장 짧은 단어를 리턴하면 되는 것 이었는데 , 이 문제는 제한이 없었다. 그래서 어떻게 풀어야 할지 갈피를 못 잡았었다.
하지만 수도코드에서 이해했던 내용은 "변수 maxNum을 선언하고 가장 큰 값을 arr[0]으로 할당" 부분이었다.
그러면 어떤 값이 입력되더라도 첫번째 element와 두번째 element를 비교했을 때 두번째가 크면 maxNum에는 arr[1]이 저장되는 것으로 이해했다.
그래서 for문에 0으로 초기화를 하고 n이 arr.length보다 작아야하고 n을 증감하는것으로 만들었다.
그리고 for문안에 if문을 넣는 것도 코드를 많이 짜보지않아서 어색해서 안되는 줄 알았는데 가능하다는 걸 알게 되었다.
그래서 설정한 for문
for(let = 0; n < arr.length; n++){
if(arr[n] > maxNum){
maxNum = arr[n]
}
}return maxNum;
}이 되는 것 이다.

profile
블록체인 개발자의 꿈을 위하여

0개의 댓글