혼자 고민해보기_ 개발/TIL (Today I Learned)

20230522(월)_ JavaScript 문법 종합반 1회차 진행 중

nuri-story 2023. 5. 22. 22:09

목표와 달성률

[금일 달성 항목]
1. JavaScript 문법 종합반 1주차 : 자바스크립트 기본 문법 완강
2. 코딩테스트 입문 LV.0 / Day1 사칙연산

3. 좋은 개발자가 위한 비밀 특강 참여

 

[내일 목표]

1.  JavaScript 문법 종합반 2주차 : es6, 일급객체로서의 함수, Map과 Set 완강

2.  코딩테스트 입문 LV.0 / Day2 사칙연산, 조건문, 배열


회고

자바스크립트 기본 문법을 수강하고 간단한 함수에 대해서는 이해를 했으나 응용을하는데 있어서 너무 어려웠습니다.

문제를 푸는 것도 버거웠고 아직까지 코드를 직접 작성한다는 것이 쉽지 않지만, 언젠가 꼭 좋은 개발자가 되고 싶습니다.


문제 해결 과정 1

[문제]

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

 

제한사항  

- 문자열의 s 길이 50이하의 자연수

- 문자열 s는 알파벳으로만 이루어져 있습니다.

 

입출력 예

s answer
"pPoooyY" ture
"pyy" false

 

[시도]

시도를 못했습니다. 간단한 이론은 이해했으나.. 막상 코드를 치려니 막막했습니다.

 

[해결]

function solution(s){
    var answer = true;

    // 1. 대문자로 통일
    s = s.toUpperCase()

    // 2. for문을 통해서 문자열 하나씩 비교
    // 2-1. p, y와 비교
    var num = 0
    for (var i =0; i<s.length; i++){
        if(s[i]==="P"){
            num++ // p이면 갯수 더하기
        }

        if(s[i]==="Y"){
            num-- // y이면 갯수 빼기
        }

    }

    // 3. 개수 체크 (p와 y의 개수가 같은지 체크)
    if (num === 0 ){
        answer = true
    } else {
        answer = false  // p, y 갯수가 같으면 0 (p가 많으면 양수, 반대 음수)
    }
    return answer;
}

var str1 = "pPoooyY"	
var str2 = "Pyy"

console.log(solution(str1))

튜터님의 해설 영상으로 해결했습니다.

 

[알게 된 점]

- toUpperCase ()
  : 문자열을 대문자로 변환해 반환하는 함수

- for 문을 통해 문자열을 하나씩 돌려서 확인하면 된다는 점

- p와 y로 갯수를 더하고 빼서 0을 만들어서 true를 만드는 것

 

 


 

문제 해결 과정 2

[문제]

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

제한사항

- absolutes의 길이는 1 이상 1,000 이하입니다. 
   : absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
-  signs의 길이는 absolutes의 길이와 같습니다. 
   : signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

입출력 예

absolutes signs result
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

 

[시도]

시도를 못했습니다. 간단한 이론은 이해했으나.. 막상 코드를 치려니 막막했습니다.

 

[해결]

function solution(absolutes, signs) {
// 1. return해야하는 answer생성
var answer = 0


// 2. 두배열을 비교해 가면서 값을 더하거나 빼줄 것
// 2-1 두배열은 크기가 같음
for (var i=0; i<absolutes.length; i++){
    //부호 (+,-)에 따른 처리
    if(signs[i] === true){
        //값이 ture인 경우 (양수)
        answer = answer + absolutes[i]
    } else if(signs[i]=== false){
         //값이 false인 경우 (음수)
        answer = answer - absolutes[i]
    }
}
// 3. 출력
    return answer;
}


var absolutes = [4,7,12];
var signs = [false, false, true]

console.log(solution(absolutes,signs))

튜터님의 해설 영상으로 해결했습니다.

 

[알게 된 점]

두배열을 비교해가면서 값을 더하고 빼는 것

 


 

문제 해결 과정 3

 [문제]

정수 num1num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

 

입출력 예

num1 num2 result
10 5 2
7 2 3

 

[시도]

function solution(num1, num2) {
    var answer = num1/num2;
    return answer;
}

그냥 나누기 하면 되는 줄 알았는데 7에서 2를 나누면 결과값이 3.5가 자꾸 나와서 테스트를 통과를 못했습니다;

 

[해결]

function solution(num1, num2) {
return Math.floor(num1 / num2);
}

구글링을 해보니  Math.floor 라는 함수가 있었습니다.

 

[알게 된 점]

- Math.floor ()
  : 주어진 숫자와 같거나 작은 정수중에서 큰 수를 반환하는 함수

 

예시

console.log(Math.floor(5.95));
// Expected output: 5

console.log(Math.floor(5.05));
// Expected output: 5

console.log(Math.floor(5));
// Expected output: 5

console.log(Math.floor(-5.05));
// Expected output: -6

 


문제 해결 과정 4

[문제]

사칙연산 

- num1과 num2의 합

- num1에서 num2를 뺀 값

- num1과 num2를 곱한 값

 

[시도]

function solution(num1, num2) {
    var answer = num1 + num2;
    return answer;
}

- num1과 num2의 합

 

function solution(num1, num2) {
    var answer = num1-num2;
    return answer;
}

- num1에서 num2를 뺀 값

 

function solution(num1, num2) {
    var answer = num1 * num2;
    return answer;
}

- num1과 num2를 곱한 값

 

 

[해결]

[시도]한 내용이 모두 맞으나 다른 사람의 풀이를 보니 화살표 함수를 사용하여 더 쉽게 해결하였습니다.

const solution = (num1, num2) => num1 + num2

- num1과 num2의 합

 

const solution = (num1, num2) => num1 - num2

- num1에서 num2를 뺀 값

 

const solution = (num1, num2) => num1 * num2

- num1과 num2를 곱한 값

 

 

[알게 된 점]

간결하고 직관적인 코드가 좋은 것인걸 알게 되었습니다.

 

 


공부해볼만한 주제

코드 컨벤션 & 네이밍 컨벤션

 

[Javascript] 자바스크립트 코딩 컨벤션

어쩌면 이 글이 이 카테고리의 맨 앞으로 갔어야 할지도 모릅니다. 하지만 중요성을 잊고있다가 최근 파일 정리를 하면서 보니까 자바스크립트의 표준 코딩 규약과는 다르게 해놓은 것들이 많

bamtory29.tistory.com

 

JavaScript 변수명 작성시 규칙 및 금지 예약어 - dasima

자바스크립트 변수명 작명법은 무엇이 있을까요? 첫글자에 올 수 있는 문자의 종류 및 기타 변수명에 올 수 있는 문자 종류를 살펴봅니다. 두 가지 이상의 단어를 변수명에 적을 때 언더바, 카멜

www.dasima.xyz

 

Javascript Naming Convention 명명 규칙

변수명과 함수명은 영어를 사용하자 변수나 함수명은 영어로 사용한다 /* Bad */ let primerNombre = 'Gustavo' let amigos = ['Kate', 'John'] /* Good */ let firstName = 'Gustavo' let friends = ['Kate', 'John'] Naming convention 을

skyksit.tistory.com


특강

좋은 개발자가 위한 비밀 - 양봉현 튜터

  • 모르는 것이 있다면 끝까지 파고들어 공부하라
  • 궁금한 점에 대해 정리하고 질문하라
  • TIL/WIL  중요!
    : 오늘 만난 에러 -> 어떤 식으로 접근 -> 해결 실마리 찾음 -> 해결 순으로 작성
  • 본인의 생각을 코드로서 표현해보는 연습
  •  개발 공부 사이트 🍯
    https://medium.com/
 

Medium – Where good ideas find you.

Medium is an open platform where readers find dynamic thinking, and where expert and undiscovered voices can share their writing on any topic.

medium.com

  • 협업, 팀웍이 중요 ⭐️
    : 리더십, 희생정신을 주로 본다, 팀 분위기가 좋으면 결과물이 좋다 
  • 면접시 주로 보는 역량
    : 회사와 관련된 지식
    : 영어 능력
    : 팀웍