728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 - 자바스크립트 [숨어있는 숫자의 덧셈(1)]

2. 시도해본 것들

처음에는 다음과 같이 코드를 작성했다.

typeof로 체크하여 숫자일 경우 덧셈하면 끝날지 알았는데

문자열 숫자는 문자열로 처리하기에 추가가 되지 않았다.

function solution(my_string) {
     var answer = 0;
     var num = Array.from(my_string);
     for(i=0; i<my_string.length; i++ ){
         if( typeof(num[i]) === 'number' ){
             answer += Number(num[i]);
         }
     }
     return answer;
}

3. 해결과정

isNaN(); (NaN을 가지고 있는지에 따라 true, false를 반환하는 함수)

이것을 이용해서 배열값이 숫자를 가지고 있는지 없는지를 판단하도록 했다.

4. 알게 된 점

 

나의 문제풀이

function solution(my_string) {
    var answer = 0;
    var num = Array.from(my_string); 
    for(i=0; i<my_string.length; i++ ){
        if( isNaN(Number(num[i])) == false ){ 
            answer += Number(num[i]); 
        }
    }
    return answer;
}

배열값을 숫자화 시킨다음 isNaN인지 판단한다.

true면 당연히 숫자가 아니므로 넘겨야하고,

false면 숫자이기에 answer에 더해주면 된다.

 

 

남의 문제풀이

function solution(my_string) {
    return my_string.match(/[0-9]/g).reduce((a,b) => parseInt(a)+parseInt(b));
}

정규식을 이용한 풀이방법..내겐 어렵다..ㅠㅠ

728x90
반응형
728x90
반응형

TIL의 회고 : 이번주 알게 된 점 총정리

이번주는 타입스크립트 기간이었다.

코딩앙마 - 타입스크립트를 여러차례 듣고, 게시물로 정리했고

노마드코더 - 타입스크립트 블록체인을 3일간 들었다.

마지막날은 정영훈 튜터님의 타입스크립트를 들을 예정

 

타입스크립트는 기본 개념만 들을 땐,

쉬운 것 같았으나 핸드북으로 보면

열심히 꼬아둔 느낌이어서 어렵게 느껴진다.

 

타입스크립트 기간은 2주니까

좀더 열심히 해야겠다.

 

https://pyoja.tistory.com/156

타입스크립트 정리내용

 

이번 주 목표 달성 여부

살짝 빠듯하긴 했지만 모든 목표는 달성했다.

초과 설정한 목표도 오늘내로 달성예정

- 타입스크립트 정리

- 그외 알고리즘문제풀이, deep dive 책, 산책 등

 

다음 주 목표 세우기

 

1) 타입스크립트 실전 공부(코딩)

2)  알고리즘 문제풀이

3) 자바스크립트 공부 병행

728x90
반응형
728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 - 자바스크립트 [개미군단]

2. 시도해본 것들

우선 문제를 보자마자 게임알고리즘 짜는것 같아서 살짝 두근두근 했다.

문제를 이해했을땐 역시 '이건 어떻게 풀지...?'

몇분 고민하다가 장군개미5부터 구하면 어떻게든 되지 않을까라고 생각했다.

3. 해결과정

count = parseInt(hp/5)

parseInt() - 문자열을 정수로 바꾸는 함수입니다.

나누기후에 몫을 구하려고 찾았는데,이 함수를 이용하면 장군개미 수를 구할 수 있었다(몫 구하기)

 

그럼 나머지 3짜리 병정개미와 1짜리 일개미는 어떻게 구하지....?

모르겠다 노가다해야지ㅠㅠㅠ

 

4. 알게 된 점

 

나의 문제풀이

function solution(hp) {
    var answer = 0;
    var count = 0;
    //장군5 병정3 일1 ==>최소한 병력
    count = parseInt(hp/5) //장군개미 숫자
    if( (hp-(count*5)) === 4){ //나머지는 4,3,2,1 이니까 노가다..
        count += 2
    } else if ( (hp-(count*5)) === 3 ){
        count += 1
    } else if ( (hp-(count*5)) === 2 ){
        count += 2
    } else if ( (hp-(count*5)) === 1 ){
        count += 1
    } else {
        count;
    }
    return count;
}

 

 

남의 문제풀이

function solution(hp) {
    const 장군개미 = Math.floor(hp / 5);
    const 병정개미 = Math.floor((hp - (장군개미 * 5)) / 3);
    const 일개미 = hp - ((장군개미 * 5) + (병정개미 * 3));
    return 장군개미+병정개미+일개미;
}

 

이게 내가 풀고 싶었던 풀이방법이다ㅠㅠ

병정개미는 나머지값을 나눠서 구할 수 있었고, (3보다크면 1 작으면 0)

일개미는 나머지를 구했으니 총합에서 장군+병정을 뺀 값

 

한줄만에 멋지게 풀순 없지만

저런식으로 깔끔하게 풀고 싶었는데 아쉽다.

728x90
반응형
728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 - 자바스크립트 [제곱수 판별하기]

2. 시도해본 것들

2의 제곱은 4..

4의 제곱은 16.. 이걸 어떻게 해야하지...? 고민했다

당연히 답은 안나왔다ㅠㅠ완전 수학문제자너!

3. 해결과정

Math.sqrt(n) 루트 또는 제곱근

갑자기 중학수학의 개념을 찾아봤다ㅋㅋㅋㅋ

 

루트 또는 제곱근을 씌웠다면 무조건 정수가 나온다.

예를 들어 루트4는 2이듯이 1로 나눈 나머지값이 0이라면 된다!

4. 알게 된 점

 

나의 문제풀이

못풀었다....

 

 

남의 문제풀이

function solution(n) {
    var answer = 0;
    let sqrt = Math.sqrt(n);
    if (sqrt % 1 !== 0) { // 나머지를 이용해 소숫점 판별, 제곱근이 아닐 경우
        answer = 2;
    } else {
        answer = 1 // 제곱근일 경우, 나머지가 오직 0
    }
    return answer
}

 

루트 또는 제곱근을 씌우고,

1로 나머지를 구할때 0인지 아닌지로 판별!

728x90
반응형
728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 - 자바스크립트 [자릿수 더하기]

2. 시도해본 것들

일반 숫자를 문자열로 만들고, 배열로 만들고, 다시 숫자로 바꿔야하나.....

깔끔하지 않아보이지만 내가 할 수 있는 유일한 방법이란 생각도 들었고

다시 개념정리 하기 위해 사용해보았다.

3. 해결과정

n은 임의의 숫자

//  숫자를 문자열로 변경
    const str = String(n);  
//  문자열을 배열로 변경
    const newArr = Array.from(str)

// 배열값을 숫자로 변경

    answer += Number(newArr[i])

4. 알게 된 점

 

나의 문제풀이

function solution(n) {
    var answer = 0;
//  숫자를 문자열로 변경
    const str = String(n);  
//  문자열을 배열로 변경
    const newArr = Array.from(str)
    
    for (i=0; i<newArr.length; i++){
// 배열을 숫자로 변경
        answer += Number(newArr[i])
    }
    return answer

}

타입변경하며 폭풍 노가다..!

 

남의 문제풀이

function solution(n) {
  return n
    .toString() //숫자의 문자화
    .split("") // 배열화 ["1","2","3","4"]
    .reduce((sum, str_num) => sum + Number(str_num), 0);
    
    //reduce함수는 누적시켜가는 내장함수로 생각하자
	//sum에 합계로 받을 시작점 0을 넣어준다.
    //str_num은 누적시켜갈 숫자를 더해야하는데 문자열 "1" 상태니 숫자화 시킨다
    //0에서 시작하여 배열의 내용을 모두 숫자화해서 더하면 끝
}

 

reduce가 뭔지 몰라서 검색 했을 때 다음과 같은 예시가 나왔다.

 

const arr1 = [ 1, 2, 3, 4, 5 ];
arr1.reduce((a, b) => a + b); // 15

 

그런데 마지막에 0은 없어서 팀원에게 질문했더니 acc의 시작값이라고 했다.

첫번째 인자는 일종의 let sum = 0 과 같은 거고,

reduce는 누적시켜주는 함수라고 생각하면 된다고 했다.

 

현재 문자열을 배열화한 상태로 ["1", "2", "3"[

이런식으로 들어가 있기 때문에 합계부분은 acc는 0 (숫자)

그 뒤 cur에는 "1" , "2" 가 들어가기에 Number로 숫자화해서 더해주면 된다. 

728x90
반응형
728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 [문자열안에 문자열]

2. 시도해본 것들

for문으로 하나씩 비교해야하나 고민했다.

각각 존재하는지는 확인 가능하겠지만

연속으로 붙어있는지는 어떻게 확인해야할지 고민했다.

3. 해결과정

구글링을 통해 [자바스크립트 문장에서 단어찾기]를 했더니

indexOf()라는 함수가 나왔다.

단순히 노가다해야하는 문제인줄 알았는데,

문장내에서 단어를 찾는 내장함수가 있을 줄이야!

 

4. 알게 된 점

 

나의 문제풀이

function solution(str1, str2) {
    if(str1.indexOf(str2) !== -1){
        return 1;
    } else {
        return 2;
    }
}

indexof 대신 search로 대체할 수 있다.

 

남의 문제풀이

function solution(str1, str2) {
    return str1.includes(str2) ? 1 : 2;
}

includes 특정 문자열을 포함하는지 확인하는 함수로 true, false를 반환한다.

728x90
반응형
728x90
반응형

[1] 타입스크립트를 쓰는 이유

자바스크립트는 런타임에 타입 결정/오류 발견

타입스크립트는 정적타입 언어로써 컴파일 타임에 타입결정/오류 발견

 

타입을 정확하게 정해줌으로써

의도하지 않는 에러를 방해하고, 미리 오류를 볼 수 있고 친절하게 설명해줌

코드의 신뢰성을 높이기 위해 큰 프로젝트에서는 타입스크립트로 작성

 

숫자 배열로 정의하였고 틀린 것은 에러표기

 

[2] 기본 타입

 

숫자,불린,배열,문자열
튜플

 

void : 결과값을 반환하지 않을때
never : 에러를 반환하거나 끝나지 않을 때
enum : 비슷한 값들끼리 묶음, 스트링도 들어갈 수 있고 숫자를 입력안한다면 인덱스는 0부터 시작

 

null과 undefined

 

[3] 인터페이스

 

객체로 표현하고자 할때 인터페이스를 사용합니다.

 

 

gender의 경우 ? 를 붙여 입력해도 되고, 안해도 됩니다.

readonly를 붙인다면 읽기만 가능하고 값의 변경이 불가능합니다.

 

객체 인터페이스

 

다양한 값을 추가하고 싶다면 [ key : value ] 로 묶어줌으로써

여러개의 값을 받을 수 있습니다. Score 대신 string으로 받을 수 있지만,

학점과 같이 정해진 문자열만 들어오게 하고 싶다면 미리 type으로 선언하면 됩니다.

 

함수 인터페이스

인터페이스를 함수에도 사용할 수 있습니다.

파라미터에도 number로 정의할 수 있고, 리턴 값도 void 또는 number로써 정의할 수 있습니다.

리턴 값으로 boolean형도 받아 사용 가능합니다.

 

class 인터페이스

클래스에도 인터페이스를 사용할 수 있다.

implements 로 상속받아 사용해야 하기에,

부모의 속성을 모두 가져와야 한다. (color, wheels, start함수)

constructor를 통해 파라미터 입력값을 받아 설정도 가능하다.

 

extends 인터페이스 확장

implements 와 다르게 extends는 인자를 더 추가하여 확장할 수 있습니다.

Car를 확장 받은 Benz는 5가지 인자값을 가져야 합니다.

 

[4] 함수

// 반환값이 없을 때
function add(num1:number, num2:number):void{
	console.log(num1+num2);
 }

// 숫자타입으로 반환
function add(num1:number, num2:number):number{
	return num1 + num2;
}

// 옵셔널 ? 붙여야 작동가능
function hello(name?:string):number{
	return `hello, ${name || "world"}`;
}

const result = hello();

?(옵셔널체이닝) : 있어도 되고 없어도 됨
... 여러개 인자값을 받을때 배열처리
this 사용시 예제 : a에서 this를 제외하고 입력
오버로드 : 여러개의 타입을 받을때 덮어주면 작동

 

[5] 리터럴, 유니온 / 교차 타입

 

문자열 리터럴
숫자형 리터럴
유니온 타입

color의 경우 둘다 있기 때문에 사용이 가능하지만

start함수는 Car에만 있기 때문에, 식별가능한 유니온 타입을 통해(if문을 통해) 사용이 가능합니다.

같은 name을 사용했지만, start에서는 car.name을 알 수 있고

call에서는 mobile.name임을 구분해낼 수 있습니다.

 

& 교차타입

교차타입(&)은 모두 사용이 가능하지만, 모든 속성을 기입해줘야 합니다.

 

[6] 클래스

클래스의 경우 미리 선언해줘야만 this로 사용이 가능합니다.

또는 color앞에 public / readonly를 입력해서 사용이 가능합니다.

 

접근 제한자

설정하지 않는다면 기본적으로 public입니다.

만약 private name으로 바꾼다면 클래스 내부에서만 사용가능합니다.

 

private 대신 #으로 대체가능

protected는 자식 클래스 내부에서는 참조할 수 있으나, 클래스 인스턴스로는 참조할 수 없습니다.

 

static

스태틱을 사용한 경우, this는 사용 불가능하고 클래스명으로 접근이 가능합니다.

 

추상클래스 내부에 추상메소는 반드시 상속받은 쪽에서 구체적으로 명시해줘야 합니다.

 

 

[7] 제네릭 Generic

먼저 <T> 로 명시해준다면 뒤에 오는 타입에 따라 알아서 명시적으로 표시할 수 있습니다.

타입을 강제하고 싶다면 <number | string>으로 적어줘도 상관 없습니다.

 

인터페이스 사용법

[8] 유틸리티 타입

keyof

keyof User을 유니온 형태로 받게 함 (주석 부분과 같은 형태)

적혀 있는 값만 받을 수 있습니다.

 

Partial

인터페이스에서 일부분만 쓰고 싶을때 사용가능하다.

Partial<User>은 현재 주석 처리한 부분과 동일하고 새로운 입력값을 받으려하면 에러가 발생한다.

 

 

Required

현재 age는 옵셔널체이닝을 한 상태이나 Required를 했기에 모두 명시해야만 하는 상황입니다.

 

할당만 가능하고 변경은 불가능
레코드 타입
레코드타입 예시2

K는 키, T는 타입으로 위와 같이 사용이 가능하다.

 

Pick

Pick 원하는 키값만 사용할 수 있다.

Omit

Pick 반대개념으로 사용

 

 

Exclude

타입1(T1)에서 타입2(T2)를 제거하는 방식

NonNullable타입

Non과 undefiend만 제외한 타입만 남는다.

 

 

[번외] 노마더코더

as타입

type으로 미리 내용을 지정하면 복사하기 편하다. 객체뿐만 아니라 다른 곳에서도 사용 가능하다.

 

unknown타입

unknown타입을 사용하려면 미리 체크해야 사용 가능하다.

추상클래스는 직접 인스턴스를 만들지 못하고, 상속받을 수 만 있다.

728x90
반응형
728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 [배열의 유사도]

2. 시도해본 것들

지금 내수준에서는 동일한 값일시 반환하면 되니

이중포문을 써야겠다는 생각이 들어서 바로 실현했다.

3. 해결과정

s1과 s2가 같다면 새로 만든 s3 배열에 추가하고

반환값을 s3의 길이로 하면 되겠구나라고 생각했고 바로 풀 수 있었다.

 

4. 알게 된 점

 

나의 문제풀이

function solution(s1, s2) {
    var s3 = [];
    for (i=0; i<s1.length; i++){
        for(j=0; j<s2.length; j++){
            if(s2[j]===s1[i]){
                s3.push(s2[j]);
            }
        }
    }
    return s3.length;
}

남의 문제풀이

function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}

filter와 includes를 통해 깔끔하게 정리

분명 배웠던 내용인데 실전에 사용해본적이 없어서

나중에 저렇게 능숙하게 써먹고 싶다. 오늘은 저 내용을 분석해봐야지.

728x90
반응형

+ Recent posts