인간이 되고 싶은 원숭이

[ 노 젓기 2주차 ] 블럭 못 끼우는 원숭이 본문

원숭이의 모험/[항해 99 WIL ] 노 젓는 원숭이

[ 노 젓기 2주차 ] 블럭 못 끼우는 원숭이

강문이 2022. 3. 16. 22:33

 

 

 

 

이번주의 느낀 내 감정

 

 

 

function solution(num) {
    var answer = 0;
    
    for(var i = 0; i < 500; i++) { // 500번까지만 반복
        if(num != 1) { // 1이 아닌 경우
            num = num % 2 == 0 ? num / 2 : num * 3 + 1; // 계산진행
        } else { // 1인 경우
            return answer = i; // 현재 횟수를 출력
        }
    }
    
    return answer = -1; // 500번을 실행했지만 return된 값이 없는 경우

프로그래머스 1-1 별 찍기

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => { //입력받은 숫자를 'data에 받는다'
    const n = data.split(" "); // data(입력받은 숫자)를 배열로 변경
    const a = Number(n[0]), b = Number(n[1]); //a는 한줄에대한 별의 갯수, b는 몇줄 출력
    console.log(a);
    console.log(b);
});
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    // 변수 하나를 선언 해준 뒤 "*"을 a만큼 반복해준다는 반복문 .repeat()를 사용
    const star = "*".repeat(a)
    // a는 가로이고 b는 세로 이기 때문에 b만큼 세로를 찍어준다라는 것 때문에 for문을 이용해 돌린다
    for (let i=0; i < b; i++)
    // 그 값을 콘솔에 star로 찍어준다
    console.log(star);
});

새로 알게 된것

1. "*".repeat(a)은 "*"을 a만큼 반복해라

 

 

 

프로그래머스 1-2 짝수와 홀수

 

function solution(num) {
    var answer = '';
    return answer;
}
function solution(num) {
    //return(반환해주는것) num를 2로 나누었을때 나머지가 ===(완전히 같다)0과 같을때(완전히 나누어       떨어져서 나머지가 안 나와 짝수)참일경우에는 "Even"을 거짓일경우에는 "Odd"를 반환한다
    return num%2===0?"Even" : "Odd";
}

새로 알게 된 것

1. 삼항연산자 ( condition ? exprIfTrue : exprIfFalse ) 대략 if 문을 간략하게 사용 할 수 있다

 

 

 

프로그래머스 1-3 가운데 글자 가져오기

 

function solution(s) {
    var answer = '';
    // 만약 s의 길이가 2로 나누었을 때 나머지가 0일 경우에 (짝수일 경우에)
    if (s.length % 2 ===0) {
        // answer에 s의 인덱스인 [s.length에 2를 나누면 (인덱스가 2가 되어 "e"로 선택이 되고
        // 거기에 -1를 해주면 인덱스가 1이 되기 때문에 w로 잡힌다)]
        // 그리고 그 인덱스 1에 + 또 2로 나누어 2를 가지기 때문에 "we"를 뽑아 낼 수 있다
        answer += s[s.length / 2 -1] + s[s.length / 2];
    } else {
        // 그 외일 경우(홀수일 경우)에는 Math.floor(반내림)을 해주는데 홀수를 2로 나누면 2.5가              되기 때문에 반 내림해주면 2가 되고 그럼 "abcde"에서 인덱스 2번째 이니깐 "c"만 가져 올             수 있다
        answer += s[Math.floor(s.length / 2)];
    } 
    return answer;
}

 

프로그래머스 1-4 없는 숫자 더하기

 

function solution(numbers) {
    var answer = 0;
    //i 는 0부터 10까지 로 for으로 돌려주고
    for (let i=0; i < 10; i++) {
        //만약 numbers라는 곳에 i가 포함(.includes)되지 않는다(!)면
        // answer에 i를 더해라
        if (!numbers.includes(i))
            answer+= i;
    }
    return answer;
}

 

새로 알게 된 것

1. .includes() 포함하는 것

2. ! 부정문

 

음양 더하기

 

function solution(absolutes, signs) {
    var answer = 0;
    for (let i=0; i < absolutes.length; i++) {
        //삼항문을 이용해서 signs[i] 가 true 일 경우에 answer에 absolutes[i]째를 더해주고
        // false일 경우에는 answer에 absolutes[i]째에 -1(음수로 만들기 위해서)를 곱해준다
    signs[i] ? answer+= absolutes[i] : answer += absolutes[i]*-1;
    }
    return answer;
}

 

 

평균 구하기 

 

function solution(arr) {
    var answer = 0;
    // arr.length에서 수를 뽑아와야 하기 때문에 for문을 이용한다
    for (let i=0; i < arr.length; i++) {
        // answer 라는 변수에 arr[i]를 더한다 왜냐 나누어줘야 하기 때문이져
        answer+=arr[i];
    }
    // 반환값에는 answer에 arr.length(숫자죠)에 값을 나누어준다.
    return answer/arr.length; 
}

 

 

핸드폰 번호 가리기

 

function solution(phone_number) {
    // phone_number에 -4를 하는 이유는 뒷자리 4자리수를 제외하고 '*'를 붙여줘야 하기 때문이지요   
    var answer = phone_number.length-4;  
    // 그리고 '*'를 반복을 해줘야 하기 때문에 .repeat 문을 사용하고 phone_number에 substring(끼워주는 문)를 'answer' 값에 붙여넣기 해주면 어차피 뒷 자리 4자리수를 제외한 수는 같기 때문에 뒷자리 4자리 수는 똥 하고 튀어나온다.
    return '*'.repeat(answer) + phone_number.substring(answer);
}

부족한 금액 계산하기

 

function solution(price, money, count) {
    var answer = 0;
    // 자 일단 i는 0이 되어서 곱하게 되면 다시 0이 되어버리기 때문에 i=1, 그리고 count 는 1부터 시작 해야 하기 때문에 i<=count,
    for (let i=1; i <= count; i++)
        // answer에 price에 i(즉 탄 횟수)를 곱한수를 더한다
        answer += price*i
        // 그러면 돈을 가지고 있는 익명의 철수가 20원을 들고 있기 때문에
        // 알맞게 욕심 안 부리고 잘 탔으면 0, 욕심 부리고 더 많이 탔으면 돈이 부족하기 때문에
        // 철수가 가지고 있는 돈 20에서 -money 를 해준다
    return money > answer ? 0 : answer-money
}

 

 

길고 길었던 항해 2주차가 끝이 났다 

이번에 만난 팀원들은 굉장히 사람들이 밝았고 너무 마음에 들었다.

지금 3주차에 들어서면서 헤어지게 되었지만 cs스터디가 같은 조라서 6주동안은 만나게 된다. 너무 좋다

 

이번 2주차의 메인은 알고리즘 풀이었다. 공부도 하지 않았고 갑작스러운 알고리즘 테스트라 굉장히 당황스러웠지만

어쩔 수 있나 일단 커리큘럼이 이렇게 되어 있으니 따라야 할 수 밖에

 

2주차 첫 번째 문제를 풀면서 굉장히 자괴감이 많이 들었다.

그레도 충분히 코딩에 대해서 공부를 했다고 생각 했지만 첫 번째 난이도 하하 를 마주친 순간 뇌가 멈췄다

하나도 풀지 못 했던 것이다.  나는 열심히 공부를 했다고 생각했지만 도저히 하나도 풀지를 못 했다.

 

그래도 계속 구글링을 해보며 시간이 지났고 모의고사날이 되었다. 결국 모의고사도 하나도 못 풀게 되었다. 

처음에는 진짜 자괴감이 들고 힘들었지만 어느순간 문제를 보고 완벽히 코딩을 못 짜더라도 어떤것을 써야 겠다고

알게 되었다. 많이 신기했다. 그래서 항해 99 측에서 줬던 문제들을 무한 반복 하게 되었고 결국 모의고사 테스트가 아닌 실제 시험에서 통과하게 되었다.

 

 

이번 주차를 하면서 내 주특기인 React 의 문법인 Javascript 를 좀더 자세하게 공부하게 되었다.

특히 Javascript 에서는 ES라는것이 있는데 쉽게 생각하자면 Javascript 는 언어이고 ES 는 규격, 표준 즉 스펙을 말한다.

 

특히 우리는 ES5 와 ES6 를 많이 쓰게 되는데 이 둘의 차이점은

 

ES5 는

  1. 배열과 관련해서 새로운 메소드들이 생겼는데 대표적으로 forEach, map, filter, reduce, some, every와 같은 메소드가 생겼다. 이 메소드들은 개발자가 반복 횟수나 조건을 잘못 입력하는 등의 실수를 줄여주는 효과가 있다.
  2. object에 대한 getter/setter 지원
  3. 자바스크립트 strict 모드 지원(더욱 세심하게 문법 검사)
  4. JSON 지원(과거에는 XML을 사용하다가, json이 뜨면서 지원하게 되었다.)
  5. bind() 메소드가 생겼습니다. (this를 강제로 bind 시켜주는 메소드이다.)

 

그리고 ES6란

 

  1. let, const 키워드 추가
  2. arrow 문법 지원
  3. iterator/generator 추가
  4. module import / export 추가
  5. Promise 도입

 

이렇게 차이점이 있다. 

 

이제부터 기대했던 내 주특기인 React 를 공부하는 주차이다

처음 첫주는 기초이고 나머지는 심화 인거 같은데 많이 기대도 되고 긴장도 된다

 

이번 주특기 주차가 가장 힘든 주차라고 하는데 무사히 공부 잘 하고 보냈으면 좋겠다

 

Comments