C++에서는 당연히 되서 javascript도 될거라 생각했는데 안되서 찾아보았다.

 

C나 C++에서는 a를 b로 바꾸려면 a+1을 해주면 알아서 변환되었다.

 

왜냐? 아스키 코드가 1차이나므로,,

 

하지만 javascript에서는 안된다,, 둘의 형이 다르다고,,,

 

그래서 ascii code로 변경해서 숫자로 저장한 뒤, 숫자에 더한 후 다시 문자로 변환해야한다,

 

심지어 이 과정에서 Number나 String 함수를 사용 못한다...

 

하지만 방법은 있다.

 

아스키 코드 (숫자)를 문자로 바꿀 때

 

 String.fromCharCode( 아스키 코드 값 );

 

을 하면 된다.

 

반대로 문자를 아스키 코드 값으로 바꿀 때 

 

var a = "a";

a.charCodeAt(0);

 

으로 바꾸면 된다. 

 

javascript에서는 문자열만 존재하여, charCodeAt에 들어가는 인자는 문자열의 인덱스라고 보면된다.

 

따라서 a.charCodeAt(0); 이라는 것은

 

a라는 문자열의 맨 앞글자를 아스키 코드로 바꾼다라고 보면 된다.

 

 

C++이 확실히 알고리즘 문제 풀기는 좋은거같다,,

반응형

알고리즘 문제를 푸는데, 숫자의 모든 자리의 수를 더하는 문제가 나왔다.

 

while(number > 0){
        sum+=number%10;
        number/=10;
    }

 

C++을 생각하고 이렇게 작성했는데, 문제가 발생했다.

 

C++은 자료형이 아예 정수형과 실수형이 나뉘어져있는데,

 

javascript는 둘의 구분이 없이 Number라는 자료형으로 통일되어 있어서, C++과 다르게 나누기를 하다보면,

정수에서 실수로 바뀌어서, 정확히 말하면 소수점이 발생하여 문제가 발생했다.

 

따라서 이 문제를 해결하기 위해서는 계산할 때, 소숫점을 버리면 문제가 해결되었다.

 

그 방법은

 

숫자를 var number = 1.6 이라고 하면

 

올림

Math.ceil(number)

= 2

 

내림

Math.floor(number)

= 1

 

반올림

Math.floor(number)

= 2

반응형

가장 간단한 방법은 +를 사용하는 것이다.

 

예를 들면 

 

"안녕"과 "하세요"를 합치고 싶다면

 

"안녕"+"하세요" 라고 사용하면 된다.

 

또 concat이라는 함수를 사용할 수 있는데,

 

"안녕".concat("하세요");

 

라고 한다면 합쳐진다.

 

var str1 ="안녕";

var str2="하세요";

 

라고 해서, 

str1 + str2;

str1.concat(str2);

이렇게해도 똑같이 이용된다.

 

그리고 기존의 배열에 새로운 배열을 합친 상태를 기존의 배열에 합치고 싶다면

 

str1 += str2;

str1 = str1.concat(str2);

 

이런식으로 사용하면 된다.

반응형

Slice를 사용하면 배열 일부만 복사 가능하다.

 

array = [ 1, 2, 3, 4, 5] 일때

 

3,4,5를 복사하고 싶다면

 

index를 복사 하고 싶은 시작 점부터 복사 하고 싶은 곳 끝까지 입력합니다.

 

저렇게 3,4,5를 복사하고 싶다면

 

array.slice( 2, 5 );

 

이렇게 입력하면 됩니다.

반응형

배열 뒤에 .sort()를 붙혀주면 된다.

 

예를 들면 

 

var array = [ 3, 2, 1, 5, 4]

 

array.sort();를 하면

 

[1,2,3,4,5]로 오름차순으로 정렬 된다.

 

이것은 숫자 뿐만 아니라, 기호도 가능하다.

 

하지만 주의할 점은 정렬 될 때 ASCII 코드를 기준으로 정렬되므로 숫자를 정렬할 때 문제가 생긴다

 

[10, 5]가 있으면 정렬이 되지 않는다.

 

그 이유는 105를 문자, 즉 알파벳이라고 생각한다면

0 -> A, 1 -> B, 2 -> C 이렇게 변환할 수 있을 것이고,

각각 BAF 이라고 볼 수 있다.

 

그러면 사전 순으로는 10이 앞에 서게 된다.

그럼 정렬이 숫자의 크기대로 이루어지지 않게 된다.

 

따라서 이럴 때는 sort안에 정렬 되는 기준을 함수로 넣어주어야한다.

 

예를 들면 숫자를 오름차순으로  정렬할 것이라면

 

array.sort( function (a, b){ 

   return a-b;

});

 

이렇게 하거나

 

화살표 함수를 사용하면

 

array.sort( (a, b) => {

   return a-b;

});

 

더 간단하게는

 

array.sort( (a, b) => a-b);

 

이렇게도 가능하다. 

 

(이게 이해가 되지 않는다면 화살표 함수를 공부하는 게 좋을 것 같다.)

 

이렇게 하면 숫자 오름차순 정렬이 된다.

 

반대로 내림차순은

 

array.sort( (a, b) => b-a);

 

이렇게 하면 된다

반응형

기술 면접에서 이런 거 많이 물어본다고 해서

 

정확히 뭔지 궁금해서 찾아보았다.

 

찾아보니까 다 Programming Language 같은  수업이나

스스로 찾아서 공부하면서 들은 내용이긴 해서 이해하는데 어렵진 않았다.

 

일반적으로 프로그래밍 언어에서 메모리의 생존 주기는

 

1. 필요할 때 메모리를 할당

ex) int i; 를 하면 4bytes가 할당된다.

 

2. 할당된 메모리를 읽고 쓴다.

ex) i라는 변수를 읽거나 내용을 바꾼다. 

 

3. 필요 없으면 해제한다.

 

이런 순서이다.

 

 

 

필요 없으면 해제할 때, 자바스크립트는 가비지 콜렉션을 하여 해제하는데,

 

가비지 콜렉션은 말그대로 쓰레기, 즉 이제 더 이상 사용하지 않거나 필요 없는 메모리를 찾아서 지워준다.

 

가비지인지 아닌지는 참조되는가 되지 않는가로 알아낼 수 있다.

 

참조는 다른 메모리가 이 메모리로 접근이 가능하면 참조된다고 한다.

 

 

가비지 콜렉션 방법은 2가지가 있다.

 

1. Reference-counting 가비지 콜렉션

 

말 그대로 참조가 되는지 안되는지만 세서 없애주는 것이다.

 

int a = 3;

int b = a;

이렇게 되면, a는 b에 의해 참조되고 있는 것인데, 이 때

b = 3; 으로 바뀐다면

a는 더 이상 참조되지 않으므로 가비지 콜렉션이 수행된다.

 

이 방법의 문제는 서로가 서로를 참조하게 되면 순환 참조가 되어 메모리가 해제되지 않고,

 

이에 따라 메모리 누수가 발생한다.

 

2. Mark and sweep

 

roots라는  오브젝트 집단을 가지고,

이 집단들에 대해 참조를 하거나, 참조를 당하지 않는 메모리들을 닿을 수 없는 메모리라고 하고

이들을  가비지 콜렉팅을 한다.

 

이 방법으로는 순환 참조의 문제를 해결할 수 있다.

 

반응형

 

일정한 시간 후에 함수를 실행시키는 SetTimeout 사용법

 

 

setTimeout(() => {

   할 일

}, 시간 );

 

참고로 시간은 1000이 1초이다.

 

따라서 6초 뒤에 콘솔 로그를 띄우는 코드를 짜보면

 

setTimeout(() => {

console.log("6second");

}, 6000);

 

이렇게 사용하면 된다.

 

**참고로 메모리 누수 방지를 위해서는

 

clearTimeout() 으로 없애줘야한다.

 

clearTimeout 사용법을 예를 들면

 

var timeout = setTimeout(() => {

console.log("6second");

}, 6000);

 

clearTimeout(timeout) ;

 

이런식으로 사용하면된다.

반응형

배열에 값을 채운다.

 

사용법은 array가 있을 때

 

array.fill( 값, 시작 ,  끝);

 

array = [ 1, 2, 3, 4] 일 때,

 

array.fill( 5, 1, 2) 라고 하면

 

1번째부터 2번째까지 5로 채우는 것이므로

 

array = [ 1, 5, 5, 4]  이렇게 된다

 

 

 

array.fill(5, 1) 처럼

 

끝을 입력 하지 않을 시, 배열의 끝까지 채우게 되서

 

array = [ 1, 5, 5, 5] 가 된다.

 

 

시작과 끝을 입력하지 않으면 배열의 모든 값을 바꾸게 된다.

 

array.fill(5) 를 하면

 

array = [ 5, 5, 5, 5] 가 된다.

 

 

반응형

+ Recent posts