Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

비전공 프론트엔드 개발자

21-12-16 공부기록(JS100제) 본문

카테고리 없음

21-12-16 공부기록(JS100제)

JJ_hyun 2021. 12. 16. 21:18
        // Q11. for 문을 활용한 1 ~ 100 까지 모두 더한 수를 출력할것.
        let s = 0
        for(let i =1; i <=100; i++) {
            s = s + i;
            console.log(s)
        }

for문에 관해서 문서적인 느낌은 알고 있었는데 오늘 공부를 하면서 먼가 느낌 + 느낌이 더해진 기분이다.

for문이 1에서부터 돌기 시작해서 0(s) = 0(s) +1(i) 를 시작으로 100까지 반복을 하게 될것이다.

이를 console.log 로 출력하게 된다. 

궁금해서 console.log를 밖으로 꺼내봤더니 값이 5050 만 입력이 되었다.

생각해보니 console.log도 반복이 되어야 했는데.. 생각하면서 반복문에 이해력이 조금은 상승한 느낌이였다. 

.

.

 

 

        // Q12. 클래스를 작성해여 게임 케릭터의 능력치와 '파이어볼'이 출력되게 해라. 주어진 소스코드는 수정x
        //데이터 여기에 class를 작성할것.
        class Wizard {
     // constructor 함수는 객체에서 인스턴스가 생성이 될 때 반드시 실행이 되는 함수. 해당 객체를 초기화 해주는 역할.
            constructor(health, mana, armor){
                this.health = health;
                this.mana = mana;
                this.armor = armor;
            }
            attack(){
                console.log('파이어볼')
            }
        }

        const x = new Wizard(545, 210, 10);
        console.log(x.health, x.mana, x.armor);
        x.attack();

        // 출력
        // 545, 210, 10
        // 파이어볼

class는 처음 접하는 객체였다. 현재로써 이해를 한 부분은..

class 를 사용할때는 반드시 constructor를 선언해 줘야 한다. 

this. 연산자를 사용해서 key값을 명확하게 해주는게 좋다. 

ex)

constructor(health, mana, armor){
                this.health = health;
                this.mana = mana;
                this.armor = armor;
            }

this.health 는 constructor의 health 이다.

health = health 식은 우리는 생각해서 알 수 있지만 설명을 받아야 하는 컴퓨터는 혼동이 올 수가 있기 때문.

식을 보면서 그렇구나~ 하는데 막상 재현해보라 하면 못할것같다.. 반복 및 숙달 요망..!

.

.

 

        //Q13. 몇번째 행성인가? 수금지화목토천해 우리 행성이 몇번재 행성인지 알고싶다.
        // 입력으로 행성의 순서를 나타내는 숫자 n이 입력된다.
        // 출력으로 그 순서에 해당하는 행성의 이름을 출력한다.
        // 예를 들어 1 을 입력하면 첫번째 행성인 수성이 출력된다.
            const planets = [
                "수성" ,
                "금성" ,
                "지구" ,
                "화성" ,
                "목성" ,
                "토성" ,
                "천왕성" ,
                "해왕성"
            ];

            const n = prompt("몇번째 행성을 원하시나요?");
           
            console.log(planets[n-1]);
            // n-1은 첫번째 배열이 0 이기 때문에
일단 planets 객체를 만들어 준다. 
입력값을 받을 n을 선언해주고. 입력받은 숫자를 planets의 배열 순서로 넣어준다.
이때 -1을 해주는 이유는 0번째 배열이 수성 이므로, 1-1 을 해줘야 수성을 출력해줄 수 있다. 
.
.
 
        //Q14. 3의 배수인가요?
        // 입력으로 랜덤한 숫자 n이 주어진다.
        // 만약 그 수가 3의 배수라면 "짝" 이라는 글자를, 3의 배수가 아니라면 n을 그대로 출력해라.
        var n = prompt('숫자를 입력해주세요');
        if (n%3 == 0 && n != 0){
            // 나머지 연산자 = 3으로 나눈 나머지가 0 이 되면 3의 배수가 된다, n = 0 일때도 짝이 나오기 때문에 && 로 조건을 추가해서 부정연산자 ! 표로 0 이 아닐경우를 추가해준다.  
            console.log('짝');
        }else {
            console.log(n);
        }
일단 입력을 받아야 하는 n을 선언해준다. 
여기서 나머지 연산자를 사용하는데, 
(나머지 연산자 - 왼쪽 피연산자를 오른쪽 피연산자로 나눴을 때 나머지를 구한다.(부등호는 항상 왼쪽연산자를 따른다.))
n%3 == 
1. 조건문으로 if(만약) n(입력받은 값)%(나머지연산자) ==(동등연산자)0
-> n을 3으로 나눳을때 나머지가 0이다.
 

&& (and 연산자 - 왼쪽 오른쪽 둘다 참이여야 한다.) (그리고)

 

n != 0

 

2. n =0 이 아닐때(!부정연산자)

-> 이는 입력할 값이 0 일때도 짝으로 찍히는 것을 방지하기 위함이다.

.

.

 

위 두가지 조건이 성립할때 console.log('짝') 으로 찍히게 한다.

else(아닐경우) console.log(n)일 출력한다. 

.

.

 

이 문제는 %(나머지) 연산자를 활용하고, &&(엔드) 연산자를 확실히 알고 있었다면 쉽게 풀 수 있었을것같다.

물론 난 지식이 부족했기에 풀지 못했다.. 쉬운 문제였는데 풀지못한 내 자신.. 공부 더하자.. 

.

.

 

        //Q15. 자기소개
        //입력으로 김다정 이라는 이름이 주어지면 "안녕하세요. 저는 김다정입니다. " 라고 출려하게 해라.
        //입력 = 김다정 , 출력 = 안녕하세요. 저는 김다정입니다.
        var name =prompt();
       
        console.log(`안녕하세요. 저는 ${name} 입니다.`)
        // 자바스크립트17에서 지원하는 `` 문자를 사용하는 문제.

이는 ``(백틱)을 아느냐 문제인것 같다. 

        console.log('안녕하세요 저는 '+ name + ' 입니다.')
 
이렇게 작성해도 똑같이 출력이 되는데 손이 덜 가는건 사실이다. 만약 출력해야 될 양이 많아진다면 ``을 애용해야지..

.

.

 

        //Q16. 로꾸꺼
        //문장이 입력되면 거꾸로 출력하는 프로그램을 만들어보자.
        // 입력 = 거꾸로, 출력 = 로꾸거

        var str = '거꾸로'
        console.log(str.split('').reverse().join(''));
        //메소드들을 연결해서 처리하는 방식을 메소드체이닝이라고 한다. (자바스크립트의 특징)


        //문자열에서 거꾸로 표한하는 메소드는 없다. 배열에서는 reverse로 사용 할 수 있기 때문에
        //문자열을 >> 배열로 바꿔서 표현하면 되겠다.
        // split() -> 문자를 배열로 반환하는 함수
        // split(',') + str = '거,꾸,로' == ['거','꾸','로']
        // split('-') + str = '거-꾸-로' == ['거','꾸','로'] -> split('요거') 요거를 기준으로 문자를 쪼개서 배열에 넣는다.
        // 빈 문자열을 넣게 되면 문자 하나하나를 쪼개서 넣게된다.
        // split('') + str = '거-꾸,로' == ['거','-','꾸',',','로'] 가 반환된다.

        // join() -> 배열을 문자로 반환하는 함수
        // 위 예제에서 .join()을 입력하면 , 로 나눈 스트링으로 반환된다.
        // (요거) 요거를 기준으로 나눌 수도 있다. ()안에 먼가를 넣으면 각각의 문자들 사이에 위치하게 된다.
        // 빈문자열을 넣게 되면 그냥 이어서 반환해준다.

처음 문제 해결을 시도했을때 막연하게 str.reverse() 로 했는데 오류가 나더라.. 내가 메소드를 잘못기억했나.. 하던 차에

reverse는 문자열에선 쓸 수 없다더라.. 그래서 여러 메소드들을 거치면서 가공되는 느낌이다.

 console.log(str.split('').reverse().join(''));

str.split -> 문자 -> 배열로 변경      // ['거', '꾸', '로']

str.split.reverse() -> 배열을 역순으로 배열한다.     // ['로', '꾸', '거']

str.split.reverse().join('') -> join 메서드를 이용하여 빈문자열을 넣으면 이어서 반환해 준다.    //로꾸꺼

.

.

둘다 처음 보는 메소드들이라 이해를 돕기위해 주석처리로 정리를 조금 해두었다. 복습할때 한번 더 보기위해..!

.

.

 

        //Q17. 놀이기구 키제한
        //입력으로 키가 주어고, 150이 넘으면 Yes 아니면 No 를 반환하는 프로그램을 작성해라.
       
        const tall = prompt('');
        if (tall >= 150){
            console.log('Yes');
        }else{
            console.log('No');
        }

오랜만에 도움없이 푼 문제..! (그만큼 난이도가 쉬웠다는 반증이겠지..)

이해가 확실히 되고, 다시 풀 자신도 있어서 설명은 pass ! ! !

.

.

 

        //Q18. 평균 점수
        // 국영수 세과목 평균점수 구하기
        // 공백으로 구분하여 세 과목의 점수가 주어지면 전체 평균점수를 구하는 프로그램을 작성해라.(단, 소수점은 버린다.)
        // 입력 = 20 30 40 , 출력 = 30

        const score = prompt().split(' '); //prompt 로 세 과목의 점수값을 받는데 띄어쓰기로 구문하여 받고, 그 점수의 평균을 구해줌.
        var sum = 0;
        for(let i=0; i< score.length ;i++){
            sum = sum + parseInt(score[i], 10);
        };
        console.log(Math.floor(sum/score.length));
        //Math.floor : 주어진 값 이하의 가장 큰 정수를 반환한다.

for문 부터 뜯어보자..! 

 

for(let i=0; i< score.length ;i++)

 

for( i 는 0 <- 초기값, i < score.length <- score 값이 늘어나면 반응함. i++ )

 

sum = sum + parseInt(score[i], 10);

 

sum = sum + parseInt(문자를 진수에 맞게 정수로 반환해줌) (scroe[i] <- 스코어의 배열 순서에 접근, ,10) <- parseInt를 10진수로 표현하겠다. )

.

.

자.. 만약에 10 20 30 을 입력했다..! 

.

.

그럼 i = 0 일때 , 

0(변수 sum을 0으로 초기화 시켜주었음) = 0 + 10 <- parseInt(값, 10) 10진수 표기법으로 입력받은 10은 10으로 표현되었고, 첫번째 sum 은 10이라는 값이 담기는데 이는 score의[0]번째 값이 되는것이다. 

 

다시한번 더! i = 1 일때,

sum = 10 + parseInt(scroe[1], 10) 식이 되는데, 두번째로 입력한 20이 parseInt의 10진법으로 20으로 나타나고, 

sum = 10 + 20 -< 20은 score 배열의 두번째 되시겠다. 고로 i=1 일때 sum 은 30이 된다.

 

i = 3 일때도 마저 반복하게 되면 sum = 60이 된다. 

이제 출력을 위한 식이 나온다. 

 

console.log(Math.floor(sum/score.length));

 

Math.floor ( 소수점 이하의 가장 큰 정수를 반환해줌.) (sum / score.length) <- 60의 값을 받은 sum 은 받은 배열의 크기 만큼 나눠주면 평균값이 나오게 된다. 

.

.

 

        //Q19. 제곱을 구하자.
        // 공백으로 구분하여 두 숫자 a,b 가 주어지면 a의 b승을 구하는 프로그램을 작성해라.

        const num = prompt().split(' ');
        console.log(Math.pow(parseInt(num[0], 10),parseInt(num[1], 10)));

const num = prompt().split(' ');

 

prompt 로 값을 입력받고, split(' ') -> 띄어쓰기로 구분하겠다. 

 

console.log(Math.pow(parseInt(num[0], 10),parseInt(num[1], 10)));

 

Math.pow()는 제곱근을 구할때 쓰는 메서드이다. 

pow(parseInt(num[0],10) -> 정수로 받는 num의 [0]번 배열은 10진수도 받는다. 

parseInt(num[1],10) -> 위 내용과 같음 (배열만 [1]번으로 받음. 

 

그리고 pow에 의해서 1번째 배열은 0번째 배열의 지수값이 된다. 

.

.

 

        //Q20. 몫과 나머지
        //공백으로 구분한 두 숫자가 주어진다.
        //두번째 숫자로 첫번째 숫자를 나누었을때 그 몫과 나머지를 공백으로 구분하여 출력해라.
        // 입력 = 10 2 , 출력 = 5 0
        const num = ['7', '2'];
        var val1 = Math.floor(parseInt(num[0], 10)/parseInt(num[1], 10));
        // floor 매소드로 몫을 구함 parseInt로 확실히 숫자형으로 형변환을 해줬다.
        console.log(val1); //확인 -> 3
        var val2 = parseInt(num[0], 10)%parseInt(num[1], 10) // % 는 나머지 연산
        // val2는 나머지를 구하는 식인데, 나누기가 아니라 나머지 연산자인 %를 사용하여 1을 찾았다.
        console.log(val2); // 1
        console.log(val1, val2); // 3 1

var val1 = Math.floor -> 해당 값에서 보다 가장 작은 정수를 찾는 메서드 

(parseInt(num[0],10) -> num 배열의 첫번째 값을 숫자형으로 변환하고, 10진수로 표현한다. 

/ -> 나누기 

parseInt(num[1],10)) -> num 배열의 두번째 값을 숫자형으로 변환하고, 10진수로 표현한다. 

console.log(val1) 을 찍어보면 3이 찍힌다. ( var num = ['7', '2'] ) = 7/2 = 3.5 인데 floor 로 3이 출력

var val2 = parseInt(num[0],10 ->  num 배열의 첫번째 값을 숫자형으로 변환하고, 10진수로 표현한다. 

%% 나머지 연산자. 

parseInt(num[1],10) -> num 배열의 두번째 값을 숫자형으로 변환하고, 10진수로 표현한다. 

 

console.log로 찍어보면 7을 2로 나누면 나머지는 1이 되고, 그 값을 잘 반환되는걸 확인 할 수 있다. 

.

.

 

        //Q21. set 은 어떻게 만드나요? (보기 문제여서 설명으로 공부내용을 대처한다.)
        //set 이란? 중복되지 않는 데이터를 저장하는 데이터구조 이다. -> 중복을 허용하지 않는다.
        const list = [1,2,2,3,4,5,5,5,6];
        var setVal = new Set(list);
        //setVal.add(10); // 값을 추가하는 메서드(끝에 추가된다.)
        //setVal.delete(3); //값을 삭제하는 메서드
        //console.log(setVal.has(10)); //변수 안에 값이 있는지 찾아준다.console.log()로 찍어보면 true or false로 찍힌다.
        console.log(setVal);

 

set에 관한 내용은 코드안에 다 기재가 되어 있으므로 다시 적지는 않겠다. 

.

.

 

        //Q22. 배수인지 확인하기
        //다음 배수 i가 6의 배수인지 확인하는 방법으로 올바른것은? (보기 문제여서 설명으로 공부내용을 대처한다.)
        // i 를 6으로 나눳을때 0으로 딱 떨어지는지 확인해야하는 즉, 나머지 연산인지 확인해보면 된다.
        // i/6 == 0 -> 단순 나눗샘으로는 몫이 0 이 나오기 때문에 배수인지 아닌지 확인하기가 불가능하다.
        // i&6 == 0 -> &(and연산자) 비트연산자 즉, 피연산자들을 2진수로 바꿔서 각 자리의 수를 비교한다.
        // 위에 식은 둘다 1일때 1을 반환하고, 아래 식은 둘중 하나만 1이여도 1을 반환한다.  
        // i|6 == 0 -> 비트연산자. 위에 내용 참고.
        // i//6 == 0 -> // 두개는 주석처리다.
        // i%6 == 0 -> 이게 나머지 연산자이다.

처음 이 문제를 접했을때,,, 왜 나머지 연산자가 떠오르지 않았을까.. 문제에서 나와있다.. 나눳을때 0으로 떨어지는..

.

.

 

        //Q23. OX문제
        //console.log(10/3)의 출력 결과는 3이다.
        //console.log(Math.floor(10/3));  // 답 X
3.333333 이 나온다... 3이 나오려면 Math.floor(10/3) 으로 해야 3.3333 보다 작은 제일큰 정수 값이 나온다. 
.
.
 
        //Q24. 대문자로 바꾸기.
        // 이름이 입력되면 전부 대문자로 출력되는 프로그램을 만들어라.
        // 입력 = mary , 출력 = MARY
        var name = prompt('');
        console.log(name.toUpperCase());
        //변수명.toUpperCase -> 대소문자 구분없이 대문자로 반환한다.
        //변수명.toLowerCase -> 대소문자 구분없이 소문자로 반환한다.

처음 보는 메서드이다. 한번씩 사용한다고 하니 잘 봐두자..! 

.

.

 

        //Q25. 원의 넓이를 구해라.(함수)
        //원의 넓이는 반지름의 길이 x, 반지름의 길이 x 3.14 로 구할 수 있다.
        //함수를 사용하여 원의 넓이를 구하는 코드를 작성해보자.
        // 입력으로 반지름의 길이 정수 n이 주어지면 원의 넓이를 반환하는 함수를 만들어라.
        function circleWidth(n){
           return  n * n * 3.14;
        }
        console.log(circleWidth(4));

 

function의 제일 기초적인 모습에서 식 ( n*n*3.14) 만 하면 되는 문제라서.. pass 

.

.

 

        //Q26. 행성문제2
        //수성, 금성, 지구, 화성, 목성, 토성, 천왕성, 해왕성 = Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
        // 행성 이름을 한글이름으로 입력하면 영어 이름으로 반환하는 프로그램을 만들어라.
        // var kor = [수성, 금성, 지구, 화성, 목성, 토성, 천왕성, 해왕성];
        // var eng = [Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune];
        var planets = {
            수성: 'Mercury',
            금성: 'Venus',
            지구: 'Earth',
            화성: 'Mars',
            목성: 'Jupiter',
            토성: 'Saturn',
            천왕성: 'Uranus',
            해왕성: 'Neptune'
        }
        var name = prompt();
        console.log(planets[name]);
        //console.log(planets.name); //.연산자로 접근이 안된다. 접근자 우측에 반드시 프로퍼티가 식별자로 들어가야함.
        //즉, planets . 수성 << 이렇게 접근을 해야만 값에 접근이 가능하다.
        //해석
        //planets 라는 객체를 만들고,
        //콘솔.로그로 planets의 값을 출력하게 한다.
        //name은 prompt로 입력받는다.

이 또한 해설이 코드 안에 있음으로 설명은 pass ~ 

.

.

 

        //Q27. 객체 다시만들기
        // 첫번째 입력에서는 학생의 이름이 공백으로 구분되어 입력되고, 두번째에는 그 학생의 수학점수가 공백으로 구분되어 주어진다.
        //두 개를 합쳐 학생의 이름이 key이고 value가 수학점수인 객체를 출력해라.
        //입력 = YuJin Hyewon , 70 100 출력 = {'Yujin': 70, 'Hyewon': 100}
        var keys = prompt().split(' ');
        var vals = prompt().split(' ');
        var obj = {};
        for(let i=0;i<keys.length; i++){
            obj[keys[i]] = vals[i];
        }
       
        console.log(obj);
 

객체 obj 를 console.log 할 껀데, 키 와 값을 담을 그릇인

var keys 를 입력받는데, split(' ') 띄어쓰기를 기준으로 받겠다.

var vals 도 마찬가지

 

for( i = 0; i < key값의 크기; i ++);

  obj[keys[i]] = vals[i];  <- 이게 약간 이해가 안되고 어색하다..

.

.

 

일단 오늘 공부한 내용은 여기까지.. 이해가 잘 안되는 부분은 복습하면서 다시 한번 집고 넘어 가야겠다. 

글을 쓰다보니 내용이 많이 길어졌는데 길어진 만큼 공부가 되고 있는거겠지. 좀만 더 더 더 노력하자 화이팅!!