[엘리스 SW 엔지니어트랙] 6 Day

·2022년 9월 19일
0
post-thumbnail

6일차

오늘은 자바스크립트를 시작하는 날!
1주차는 글 1개로 퉁치고 오늘부터 TIL을 쓴다!
오늘은 자바스크립트 내용을 복습하는 시간으로 자바스크립트 문제집이 제출되어 하루종일 문제를 풀고 학습했다.
레이서 들과 소통하면서 다양한 풀이방법과 메서드를 깨닫기도하고, 헬프센터로 질문하기도 한 날이었다.

스터디

오늘 저녁부터 1차 스터디 신청 및 모집이 진행되었다. 벌써 신청하고 채팅으로 스터디원과 통성명은 완료했다! 1차는 기초스터디지만 2차에는 더 심화된 스터디를 할 수 있기를~


학습 내용과 그에 따른 회고

문제를 풀어가면서 헷갈리는 메서드와 개념들을 기록하였다.

해당 내용은 학습시에 자주 잊는 내용과 추가로 깨달은 내용을 필기한 내용의 순서이다.

공백 추가

document.writeln(); : 사용하면 출력값 사이에 공백을 넣을 수 있음

document.writeln(변수명);

주석

 // : 한 줄 주석 처리 
/* */ : 여러 줄을 주석 처리

//const num = 1;
/*
const str;
str = "Hello World"
*/

문자열 거꾸로 출력하기

document.write(reverse("Hello"));

//olleH 출력
function reverse(str) {
    var reverStr = "";
    for (var i = str.length-1 ; i >= 0; i--) {
        reverStr += str.charAt(i);
    }
    return reverStr;
}
  • String.prototype.charAt()
    • charAt() 함수는 문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환
    • charAt(index)
    • 해당 index에 대응되는 문자 출력
  • Array.prototype.concat()
    • concat() 메서드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환합니다.
    • concat(str1, str2, …)
    • 문자열 합침, 적어도 1개의 함수 인자 필요
    • ‘’.concat(str1) 빈문자열에서도 쓸수 있음
  • javascript reverse()
    • reversed = str.split('').reverse().join('');
    • split('') 하나의 문자마다 배열의 하나의 인덱스 값으로 문자를 분리 -> revese 거꾸로 배열 시킴 -> join('')공백없이 배열내의 모든 인덱스를 이어붙여 문자열로 만듬

문자열 관련 함수

[조건]
입력: 문자열들로 이루어진 배열 1개
출력(반환): 문자열들이 알파벳 순서대로 나열된 배열
function repeatString(str, n) {
    while (n -1 > 0) {
        str += str;
        n--;
    }
    return str;
};
  • String.prototype.repeat()
    • keyword : javascript repeat string / 자바스크립트 문자열 반복

      function repeatString(str, n) {
          return str.repeat(n);
      }; /*str이 n번 반복하여 반환됨*/
    • repeat(n) : 문자열을 주어진 횟수(n)만큼 반복해 붙인 새로운 문자열을 반환합니다.

배열 관련 함수1

[조건] 
입력: 문자열들로 이루어진 배열 1개
출력(반환): 문자열들이 알파벳 순서대로 나열된 배열
function sortStringArray (str) {
	return str.sort();
}
  • sort()메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환
  • 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따름
  • arr.sort([compareFunction])
    function compare(a, b) {
      if (a is less than b by some ordering criterion) {
        return -1;
      }
      if (a is greater than b by the ordering criterion) {
        return 1;
      }
      // a must be equal to b
      return 0;
    }
    • compareFunction(a, b)
      • a - b 이 0보다 작은 경우, a가 먼저옴 (a → b)
    • compareFunction(a, b)
      • a - b 가 0일 때, a와 b를 서로에 대해 변경하지 않음
      • 다른 요소에 대해 정렬함
    • compareFunction(a, b)
      • a > b 가 0보다 큰 경우, b가 먼저옴(b → a)
  • 오름차순
    var numbers = [4, 2, 5, 1, 3];
    numbers.sort(function(a, b) {
      return a - b;
    });
    console.log(numbers);
    
    // [1, 2, 3, 4, 5]
  • 내림차순
    • 숫자형일 경우

      function reverseStringArray (str) {
          str.sort(function (a, b){
              return b - a ;
          });
          return str;
      }
    • 문자열일 경우
      - charCodeAt 메소드 때문에, 숫자형이 들어 올 경우 오류남

      function reverseStringArray (str) {
          str.sort(function (a, b){
              return b.charCodeAt() - a.charCodeAt() ;
          });
          return str;
      }

배열 관련 함수2

[조건]
입력: 문자열들로 이루어진 배열 1개
출력(반환): 문자열들이 알파벳 순서 반대로 나열된 배열
function reverseStringArray (str) {
	str.sort().reverse();
	return str;
    }
  • 위의 sort()reverse() 를 결합했음!
    • sort() 로 오름차순
    • reverse() 로 순서를 뒤집어서 내림차순 시킴
function reverseStringArray (str) {
    str.sort(function (a, b){
        return (a > b ? -1 : 1) ;
    });
    return str;
}
  • sort() 내부 함수로도 문자열 내림차순 가능!!

    뺄셈기호로 시도해도 통과되지 못한 테스트케이스가 존재해서 무척 고생했었는데, 타입때문이었다! if 문을 사용해 서로 비교하게끔 해버리고 retrun 값을 주는 형식으로 해결함!
    (사실 구글링을 좀 했다...)

소수의 합 구하기

1부터 200사이의 소수의 합을 구하기

let sum = 0;
for (let i = 1; i <= 200; i++){
  for (let j=2; j <= i; j++){
    if(i % j == 0) {
      if (i !== j) {
        break;
      } else {
        sum += i;
      }
    } 
  }
}
document.write(`1이상 200이하의 소수의 합 = ${sum}`)

잊지 않기
해당 문제를 풀면서 블로그를 써야겠다고 다짐하게되었다. 사실, 이 문제는 두 번째로 접하는 것이고, 두 번다 깔끔하게 풀어 내기 힘들었던 문제였다.
소수 구하기 알고리즘에서 작성하는 while 문을 그대로 가져와 사용하려고 했던점이 문제였던 것같다. 계속 공부해가면서 더 괜찮은 풀이 방법을 깨닫게 되겠지만, 오늘있었던 날을 기억하기 위해 이 글을 쓴다.

break 와 continue 의 차이는?
코드를 작성하면서, break와 continue를 얼마나 많이 쓰고 지웠는지 모르겠다.
먼 훗날 미래의 내가 다시 봐도 이해하기 쉽게 쓰기가 참 힘들다. 지금 기준으로 이해한 내용으로 정리 해놓는다!
break : 현재 반복문, switch문을 종료하고 그 다음문으로 프로그램 제어를 넘김

for (let i = 1; i <= 200; i++){
  for (let j=2; j <= i; j++){
    if(i % j == 0) {
      if (i !== j) {
        break;
      } else {
        sum += i;
      }}}}

for 문을 종료시키고 상위단계 for문의 다음 i값 조건으로 넘어간다.
continue : 지정된 루프의 현재 반복에서 명령문의 실행을 종료하고 반복문의 처음으로 돌아가여 루프문의 다음 코드를 실행함

for (let j=2; j <= i; j++){
    if(i % j == 0) {
      if (i !== j) {
        continue;
      } else {
        sum += i;
      }
    } 
  }

for문내의 바로 다음 j값 조건으로 넘어간다.

숫자형 변형

  • parseInt()
    • 숫자형으로 변경해줌

잡담

아참 1주차 선택강의에서 리눅스 강의도 있었던걸 잊었다!
짬내서 들어서 그것도 꼭 완강해야지 ㅠ.ㅠ

profile
성실하게

0개의 댓글