// 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 == 0
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]; <- 이게 약간 이해가 안되고 어색하다..
.
.
일단 오늘 공부한 내용은 여기까지.. 이해가 잘 안되는 부분은 복습하면서 다시 한번 집고 넘어 가야겠다.
글을 쓰다보니 내용이 많이 길어졌는데 길어진 만큼 공부가 되고 있는거겠지. 좀만 더 더 더 노력하자 화이팅!!