오랜만에 SQL 문제를 풀어보자

당장은 html 이나 javascript 쪽이 중요하지만

그래도 까먹지 않을 정도로만 SQL도 학습하려 한다.

 

 

성분으로 구분한 아이스크림 총 주문량

 

늘 하던대로, 테이블을 합치고 정렬을 하면 될듯하다.

 

딱히 함정은 없는듯해 보임

 

select  i.ingredient_type, sum(f.total_order) as TOTAL_ORDER
from first_half f left join icecream_info i on f.flavor = i.flavor
group by i.ingredient_type
order by f.total_order

 

역시, 간단한 문제였다

 

 

 

 

루시와 엘라 찾기

 

마찬가지로 간단한 문제인데,

여러 이름을 찾아야 하기 때문에 

where name like 를 여러번 적는것 보다 

 

where name in  을 써주면 간단하다.

select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
order by 1

 

 

'사전캠프' 카테고리의 다른 글

27일차 - 알고리즘 풀이  (0) 2024.07.29
26일차 - 알고리즘 풀이  (0) 2024.07.25
25일차 - 알고리즘 풀이  (3) 2024.07.24
24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22

 

행렬의 덧셈

 

행렬이란게 처음 나왔다.

아마 JS의 새로운 배열방식 이라기 보다는

그냥 평범한 배열중 하나라고 생각하는게 좋을 듯 하다.

 

arr1 =  [[1,2],[2,3]]   일때

arr1[0] =  [1,2]     ///   arr1[1] = [2,3]   라는 것 !

 

더더 중요한것은 

arr1[0][0]  =  1    이라는것으로

배열안의 배열을 지정할 수 있게 된다는 것

 

그럼 문제를 다시 풀어보자.

일단 arr1[0][0] + arr2[0][0] = return[0][0]  을 시작으로

 arr1[0][1] + arr2[0][1] = return[0][1]  ...  다음

 arr1[1][0] + arr2[1][0] = return[1][0]   

이런식의 반복과 적절히 [ ] , [ ] 나눠주는 작업이 필요하겠다

 

저런류의 반복은 이미 이중 for문 으로 해결한 바 있다.

 

당장 문제는 행렬을 더해주는 방법보다는 

더한값을 행렬처럼 만드는 방법을 알아내야 한다.

 

제일 간단한 방법은 

[0][0] 결과 값, [0][1] 결과값 을 배열에 push 해서 행렬을 만드는 법

 

function solution(arr1, arr2) {
    var answer = [];
    for(let i =0; i < arr1.length ; i++) {
        var ans = [];
        for( let j = 0; j < arr1[i].length ; j++) {
            
            ans.push(arr1[i][j] + arr2[i][j]) 
        }
        answer.push(ans);
    }
    return answer;
}

 

완성된 코드는 이러하다

 

결과적으로 

j 반복문으로 

arr1[i][j] + arr2[i][j] 의 값 ans 가  answer [ ]  에 push 되면서   [[ ans[0], ans[1]]]  를 만들고

i 반복문으로 돌아와서

var = ans 로 ans 값이 초기화되고 

다시 j 로 넘어가서 arr[1] 로 넘어가게 된다 .

 

그렇게 해서

[ [arr[0]] , [arr[1]] ]   과 같이 행렬로 만들 수 있게 된다.

 

글로 설명하려니까 오히려 복잡해진 느낌인데, 

 

행렬은 배열 안에 배열이 있는 형태이고, 

배열 arr [a][b].... 으로 배열내의 배열의 index 를 지정할 수 있다.

 

이런 배열을

2차원 배열 ( 다차원 배열)

이라고 하며, 이러한 2차원 배열의 데이터를 활용하기 위해선 

거의 필수적으로 for 문 또한 2차원이 되어야 할 것이다.

 

 

 

 

 

'사전캠프' 카테고리의 다른 글

28일차 - SQL 문제 풀이  (0) 2024.07.30
26일차 - 알고리즘 풀이  (0) 2024.07.25
25일차 - 알고리즘 풀이  (3) 2024.07.24
24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22

알고리즘 풀다 죽은 개발자가 때깔도 곱다

 

1. 문자열 내림차순으로 배치하기

 

간단하고 쉬워보이는 문제이다

이전에 풀었던 정수 내림차순으로 나열하기 와 같은 맥락이다

 

sort  정렬 시 대문자가 소문자 앞에 오던가 뒤에 오던가 헷갈리는 부분이 있긴한데...

해보면 알 것이다

function solution(s) {
    s= s.split('').sort();
    return s
}

 

대문자가 소문자보다 앞에 오기 때문에 다행이다.

이러면 여기서 역순 reverse 적용하고 join하면 끝이다

 

function solution(s) {
    s= s.split('').sort().reverse().join('');
    return s
}

 

 

 

2. 부족한 금액 계산하기

 

1회 이용시마다 기본 금액에 무려 100% 할증이 붙는 놀이공원이 되었다

 

내가 생각 한 방법은

반복문으로 count 까지의 총 요금을 구하고, 

소지금 money 에서 총 요금을 뺀 결과가 0 이상이면 0으로 출력,

음수면 (-) 부호만 떼줘서 출력 이다.

 

여기서, 음수 부호만 떼는법만 배워오면 될듯하다

 

Math.abs();   

=  () 내의 수가 음수일 경우 양수로 바꿔준다

 

function solution(price, money, count) {
    var answer = 0;
    for(var i = 1; i <= count ; i++) {
        answer += price * i
    }
    answer = money - answer >= 0 ? 0 : Math.abs(money- answer);
    return answer;
}

위에서 설명한 그대로의 코드가 되었다

 

상당히 부끄럽게도, Math.abs는 필요가 없었다

부족한 금액에 초점을 맞춘 나머지 -를 지워야 한다는 생각을 했는데,

 

애초에  money - answer 가 음수인 경우라면,  answer -money 를 하면 양수로 나오는 것이었다

    return money - answer >= 0 ? 0 : answer - money;

이렇게 !

 

 

 

3.  문자열 다루기 기본

 

 

갑자기 '기본' 이라는 문제가 튀어나온걸 보니

아직 못배운 영역이 나왔을것이 분명하다.

 

아니나 다를까, 간단해보이는 문제이지만 어떻게 해결해야 할 지 모르겠다.

길이 4 || 6 체크는 쉽겠지만, 문자열을 포함할때 true false를 나누는 법을 모르겠다

 

답을 알아내기 위해 검색을 하다가

 

parseInt();  를 활용하는 것을 보았다.

parseInt() 는 , 문자열을 숫자로 반환하는, 기존에 알고있던 함수이다.

 

여기서 중요한건, parseInt() 는 정확하게 

(숫자로 바꿀수 있는것) ~ (숫자로 바꿀 수 있는것) 까지만 반환한다.

즉 "a123" 처럼 알파벳으로 시작하는 경우 반환될 값이 없어  NaN 가 출력된다.

"123a456" 의 경우, 알파벳 a의 이전까지인 123 까지만 반환이 된다.

 

이 문제를 풀기 위한 핵심은

숫자 이외 불순물이 하나라도 있다면 기존의 값과 달라진다는 것이다.

"a123" == parseInt("a123")    ==> false 라는 말이다

이것으로 문자열을 포함하는지를 체크할 수 있다.

최선인지는 모르겠지만 말이다

 

function solution(s) {
    var answer = 0;
    if ( s.length == 6 || s.length ==4 ) {
        if ( s == parseInt(s)) { return true}
        else return false;
    }
        else return false;
    return answer;
}

 

쓰이지도 않은 answer 를 버리고 

조건문을 조금 깔끔하게 고치면

 

function solution(s) {
    if((s.length == 4 || s.length ==6) && (s == parseInt(s))) { return true}
     else return false;
}

 

 

를  삼항연산자로

function solution(s) {
    return (s.length ==4 || s.length == 6) && (s== parseInt(s)) ? true : false
}

 

이렇게 쓸 수 있다..

 

 

'사전캠프' 카테고리의 다른 글

28일차 - SQL 문제 풀이  (0) 2024.07.30
27일차 - 알고리즘 풀이  (0) 2024.07.29
25일차 - 알고리즘 풀이  (3) 2024.07.24
24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22

1. 가운데 글자 가져오기

 

s.length 가 짝수인 경우와

s.length 가 홀수인 경우를 구분해서 어찌 저찌 하면 될듯하다

function solution(s) {
    var sl = Math.floor(s.length/2)
    return s.length % 2 == 0 ? s[sl-1]+s[sl] : s[sl];
}

그다지 어려운 문제가 아니었으므로 자세한 내용은 생략한다

슬슬

홀수 짝수를 %2 =0  으로 구분하는것이 뭔가 좀 아쉽긴한데..

 

 

 

2. 수박수박수박...

가장 먼저 생각난 방법은

for문으로 n 까지 홀수짝수로 반복을 하면 될듯 하다

 

function solution(n) {
    var answer = '';
    for( var i = 0; i < n; i++) {
        answer = i % 2 == 0? answer + "수" : answer+"박" ;
    }
    return answer;
}

뭔가... 아쉬운 코드

 

 

일단 새로운 함수

.repeat 을 배워왔다

string.repeat() 은 () 안의 횟수만큼 stirng 을 반복하여 출력해주는 함수이다.

단순히 string을 여러번 반복해야할 경우 for 문을 사용하지 않아도 된다.

function solution(n) {
    var answer = '';
    answer = n % 2 == 0 ? "수박".repeat(n/2) : "수박".repeat(Math.floor(n/2))+"수"
    return answer;
}

 

좀 그럴싸 해지긴 했지만 역시  % 2 ==0  의 늪에선 빠져 나올순 없다

 

 

 

3. 내 적 

 

내적이 뭘까

 

my enemy 인가

 

정의를 찾아봐도 무슨 말인지 알 수가 없다

 

 

 

아무튼간에 같은 인덱스 끼리 곱하고 나온걸 다 합해주면 된다고 한다..

수학이 필요하다면 배워야겠지만 이건 논외인것 같다.

function solution(a, b) {
    var answer = 0;
    for(let i = 0; i < a.length; i++) {
        answer += a[i] * b[i];
    }
    return answer;
}

 

모든 배열 순회 이기 때문에

for ( var i in a) {} 또한 사용할 수 있다.

a의 인덱스인 0 1 2 3이 i 에 들어가며 반복된다

 

4. 약수의 개수와 덧셈

 

오늘..

풀이가 좀 수월했던 관계로 한문제 더  풀려고 했는데 불안한 녀석이 걸렸다.

 

아는방법대로 하면 분명 괴짜 코드가 나올것 같은 예감이 들지만

 

일단 해보는 수밖에 없다

function solution(left, right) {
    var answer = 0; 
    let ia = 0; // 약수의 개수를 카운트할 임의 변수
    for( var i = left; i <= right ; i++ ) { // left ~ right 까지의 연산이 필요
        for( var j = 1; j <= i; j++) {   // left부터 약수의 숫자를 구한다
            if(i % j == 0) { ia += 1 ;}  // 약수로 나눈경우 ia 를 +1 
        }
        answer = ia % 2 == 0 ? answer + i : answer - i // ia 가 홀수 짝수일 때 각각 -i +i 연산
        ia = 0; // ia 카운트 초기화
    }
    return answer
}

 

약수의 개수를 카운트할 ia 변수를 만들어 주고

for문 2개를 돌려서

left (i) 의 약수의 숫자를 구하고 그 갯수가 홀수일때와 짝수일 때  + - 연산을 해준뒤 임의로 ia를 초기화

left (i) 를 1씩 늘려가며 i == right 까지 반복 하는 !!

 

작동이 잘 되다니 오히려 놀랐다 

' 그래도 모자란 코드'  라는 생각과 '뿌듯함'   이 교차한다

 

 

 

 

 

'사전캠프' 카테고리의 다른 글

27일차 - 알고리즘 풀이  (0) 2024.07.29
26일차 - 알고리즘 풀이  (0) 2024.07.25
24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22
22일차 - 알고리즘 풀이  (0) 2024.07.19

 

이제 학습의 시작을 알고리즘으로 하는것에 익숙해졌다.

 

학습이 건강해지고 있다는것....

 

 

1. 핸드폰 번호 가리기

 

그다지 어렵지 않은 문제이다. (엄청 헤맸음)

 

반복문을 이용해서 문자열 phone_number를 순회하여 length -4 까지는 * 로, 그외는 그대로 출력해주면 된다

function solution(phone_number) {
    var answer = '';
    for(var i = 0; i < phone_number.length; i++ ) {
     answer = i < phone_number.length - 4 ? answer + '*' : answer + phone_number[i] ;
    }
    return answer;
}

 

 

 

2. 없는 숫자 더하기

 

function solution(numbers) {
    var answer = 0;
    for( var i = 0; i < numbers.length; i ++) {
        answer += numbers[i]
    }
    return 45 - answer;
}

배열의 모든 숫자를 더하고 0~9 의 합인 45에서 빼는 코드를 만들었다.

 

아무래도 (야매)

정답으로 인정받기엔 어려운 답지라고 생각한다.

 

 

.includes() 함수  를 데려오도록 하자

이걸 이용하면 훨씬 그럴싸 한 코드를 만들 수 있다.

 

function solution(numbers) {
    var answer = 0;
    for ( var i = 1; i < 10; i ++) {
        if(!numbers.includes(i)) { answer +=i} 
    }
    return answer;
}

1~9 까지의 숫자를 number가 포함되어 있는지를 체크한 뒤  없는경우 ( ! ) 만 answer 에 더해준다.

 

 

 

3. 제일 작은 수 제거하기

 

우선 아는것만 가지고 풀어보자..

 

function solution(arr) {
    var answer = [];
    for( var i = 0; i < arr.length ; i++) {
        if(arr[i] != Math.min(...arr) ) { answer.push(arr[i])}
    }
    return answer < 1 ? [-1] : answer;
}

 

arr을 순회하여 arr의 최소값이 아닌경우 answer 에 push 한다.

그리고 answer 값이 없는경우 [-1] 을 리턴하고 아닌경우 answer 를 그대로 리턴...

 

 

통과는 되는데, 테스트1의 지연시간이 심상치가 않다.

아마도, arr.length 가 엄청나게 큰 경우인 듯 하다.

 

검색 해본결과, index값을 찾기 위한 for 노가다를 할 필요가 없이

 

 

indexOf() 함수를 사용하면 된다

이 문제는 사실상 Math.min() 과 indexOf() 를 위한 문제였던것

 

function solution(arr) {
    if(arr.length == 1) { return [-1]}
    arr.splice(arr.indexOf(Math.min(...arr)), 1)
    return arr;
}

우선 [-1] 이 리턴될 경우는 arr.length 가 1인 경우 뿐이므로 미리 리턴해버린다

그 후 arr 배열에서 가장 작은 수의 index 값을 splice 로 날려주면 끝이다 !

 

 

'사전캠프' 카테고리의 다른 글

26일차 - 알고리즘 풀이  (0) 2024.07.25
25일차 - 알고리즘 풀이  (3) 2024.07.24
23일차 - 알고리즘 풀이  (3) 2024.07.22
22일차 - 알고리즘 풀이  (0) 2024.07.19
21일차 - Javascript 입문 수업  (0) 2024.07.18

알고리즘 !!

월요일은 역시 알고리즘 

 

1. 서울에서 김서방 찾기

 

늘 그렇듯,

아는방법대로 풀고  모르면 검색한다

 

아는 방법

function solution(seoul) {
    let i = 0;
    while(true) {
        if (seoul[i] == 'Kim') { return '김서방은 '+i+'에 있다'}
        i++
    }
}

 

 반 드 시 seoul 에 포함이 되어있기 때문에 while  true를 돌렸다.

while 을 가급적 멀리 하라고 했지만 아무튼 근거는 있다.

 

Kim 이 나올 때 까지 seoul[i] 를 순회한다. 찾으면 i를 반환하여 문장을 출력.

끝끝

 

 

 

2. 나누어 떨어지는 숫자 배열

 

약간 복잡해 보이는 문제...

 

for (var i = 0; i < arr.length ; i++)

우선 for 문으로 arr 원소를 순회해보자 

 

 if(arr[i] % divisor == 0)

arr 의 원소를 divisor 로 나누어 떨어질 경우

 

           answer.push(arr[i]);

해당 원소를 answer 배열에 넣어준다.

 

push는 배열의 뒤에 추가하는 것이다.

 

여기서 든 생각은 arr 배열이 오름차순이라면 자연스럽게 

연산의 결과도 오름차순이 될. 것이다.

 

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

반복문 진입 전에, 해당 코드로 arr 배열을 오름차순으로 만들어 주자.

 

 

    if (answer.length == 0) { return [-1]} ;
    return answer;

 

 

값이 없는경우 -1을 리턴하게 하면 완성... 인데  

쓸데없이 if문 하나 더 쓰는것 보다는 삼향 연산자에 익숙해질 필요가 있다.

 

   return answer.length == 0 ? [-1] : answer;

거기서 거기 같지만 했다는게 중요하다...

 

 

function solution(arr, divisor) {
        var answer = [];
        arr.sort((a,b) => a-b);
    for (var i = 0; i < arr.length ; i++) {
        if(arr[i] % divisor == 0) answer.push(arr[i]);
    }
   return answer.length == 0 ? [-1] : answer;
}

최종 결과 

 

 

3. 음양 더하기

불리언 배열 ???

수학을 못해서 불리 ..한 배열

 

정리해보면, absolutes[n] signs[n] 원소가 있을때 signs[n] =false 인 경우는 absolutes[n] 이 음수이다

그 외는 양수

 

머리로는 알겠는데..

 

 for ( var i = 0; i < absolutes.length; i++) {
     if ( signs[i] == false) {
         nn.push(absolutes[i] * -1)
     } else nn.push(absolutes[i] * 1)
    }

 

우선 양수는 양수로 음수는 음수로 nn배열에 넣도록 했다

    for ( var i = 0; i < nn.length ; i++) {
        answer += nn[i]

그 다음 다 더하면.. 끝?

function solution(absolutes, signs) {
    var nn = [];
    var answer = 0;
    for ( var i = 0; i < absolutes.length; i++) {
     if ( signs[i] == false) {
         nn.push(absolutes[i] * -1)
     } else nn.push(absolutes[i] * 1)
    } 
    for ( var i = 0; i < nn.length ; i++) {
        answer += nn[i] 
    }
    return answer;

잘 작동하지만 쓸데없이 조잡해보인다. for 문도 괜히 2번 들어가고..

 

가능한 줄여보도록 하자.

 

불필요한 nn변수를 없애고 바로 answer 에서 연산

 if 구문을 삼향 연산자로 대체

function solution(absolutes, signs) {
    var answer = 0;
    for ( var i = 0; i < absolutes.length; i++) {
        answer = signs[i] == false ? answer-absolutes[i] : answer+absolutes[i]
    }
    return answer;
}

 

 

 

'사전캠프' 카테고리의 다른 글

25일차 - 알고리즘 풀이  (3) 2024.07.24
24일차 - 알고리즘 풀이  (1) 2024.07.23
22일차 - 알고리즘 풀이  (0) 2024.07.19
21일차 - Javascript 입문 수업  (0) 2024.07.18
20일차 - Javascript 입문 수업  (0) 2024.07.17

알고리즘 !

 

이쯤되니 수학 문제집을 푸는건가 하는 생각이...

 

일단 내가 할 수 있는 일을 하자

function solution(num) {
    var answer = 0;
    var count = 0;
    while (count <= 500) {
        if (num === 1) {
            answer = count;
            break;
        }
        else if (num % 2 == 0) {
         num = num / 2;
            count += 1;
        }
        else if ( num % 2 != 0) {
            num = num * 3 + 1;
            count += 1;
        }
    }
    if ( count > 500) { answer = -1;}
    return answer;
}

문제를 그대로 코드로 만든 수준의 결과가 완성되었다.

 

이래저래 설명할것도 없이 직관적이지만.. 좋은 코드라고 보기엔 어렵다.

 

다른사람의 풀이 중, 이해할 만한 수준의 코드를 가져와 보았다

 

우선, 

num 이 1 이 되었을 때 즉시 return 을 하는것으로 코드가 간결해졌다. 

return 으로 함수 전체가 종료되기 때문에 break 를 사용할 필요가 없다.

 

1이 아닐 때, 카운트를 1 증가시키고 

num이 짝수일 땐  나누기 2

그외 (홀수) 일 땐 곱하기3 +1 을 해주는 코드를 한줄로 만들고

 

while  count가 500 이상이 된다면, while문 반복을 중단하고  -1 을 return 하게 되는것으로 마무리가 된다.

 

눈 여겨볼 포인트는

while 문에 break 없이 return 으로 간결하게 코드를 짤 수 있다는 것과

A = 조건 ? true : false   구문을 유연하게 사용할 줄 알아야 한다는 것

아마 else if 보다 빠르게 연산될 것으로 보이기에 효율 면에서도 뛰어날듯 하다.

 

'사전캠프' 카테고리의 다른 글

24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22
21일차 - Javascript 입문 수업  (0) 2024.07.18
20일차 - Javascript 입문 수업  (0) 2024.07.17
19일차 - Javascript 입문 수업  (1) 2024.07.16

오랜만에 SQL 문제를 하나 풀고 시작해보자

 

 

입양 내역 테이블을 알려주고 입양을 못간 동물을 찾으라고 해서 잠시 당황했다.

 

어떻게 입양못간 동물을 골라낼 수 있을까?

 

내가 할 줄 아는 방법은,

보호소 전체 동물중 입양 간 동물을 제외한 나머지를 구하는 방법이다.

 

from animal_ins ai left join animal_outs ao on ai.animal_id = ao.animal_id

 

두 테이블을  animal_id 라는 공통 데이터를 통해 left join을 해준다.

left join을 했기 때문에 ao.datetime 데이터가 비어있는 녀석들도 join 했다

ao.datetime 데이터가 null = 입양간 데이터가 없음 = 아직 입양을 못 간 동물의 데이터

 

where ao.datetime is null

where 로 골라낸다

 

order by ai.datetime
limit 3

보호소에 들어온 날짜 기준 오름차순으로 정렬한 뒤에 3 데이터로 리밋을 걸면

결과적으로 입양가지 못한 동물 중, 가장 오래 보호소에 남아있는 순으로 3 데이터만 남게된다.

 

select ai.name, ai.datetime
from animal_ins ai left join animal_outs ao on ai.animal_id = ao.animal_id
where ao.datetime is null
order by ai.datetime
limit 3

문제에서 요구한 컬럼을 select로 지정해주면 끝 ! 

 

 

Javascript 입문 수업

 

 

오늘 배운 내용은 모듈 이다.

 

모듈은

특히, 반복 사용될 가능성이 높은 코드 뭉치를 한번에 작동시키는 버튼으로 만든다

라고 생각하면 좋을 듯 하다.

어디까지나 방식에 해당하는 개념적인 용어이기 때문에 설명이 좀 애매모호한데,

 

내가 이해한 바로는

감자가 올 때마다 세척해서 껍질을 벗기고 10등분으로 칼질한다  했을 때, 

세척해서 껍질을 벗기고 10등분 하는 과정을 '썰다' 라고 모듈화 하는것으로

감자가 오면 '썰다' 해.  로  간소화 시킬 수 있다는 것이다.

만약 새로 고구마가 들어온다면 고구마에게도 '썰다'를 지시할 수 있을 것이다.

 

또 다른 특징으로는, 

다른 문서에서 쓰여진 코드 또한 모듈화 한다면

원하는 문서로 불러와 쓸 수 있다는 것이다. 

 

 

라이브러리

10일차에, JQuery에 대해서 학습한 적이 있다.

 

위에 처럼 정리를 했었는데,

이 JQuery 가 Javascript 에서 가장 대표적인 모듈 모음집, 라이브러리 라고 할 수 있다.

 

 

JQuery 를 사용한 코드 예시

 

 

JQuery 없이 작성한 코드 예시

 

위의 예시는 JQuery의 활용성에 대해 알려주는 예시인데,

$ 두줄 만으로 empty 였던 list <li> 구간을 전부 채우는 활용을 보여준다.

아래와 비교했을 때 가히 '딸깍' 이라 할 수 있는 차이를 보여준다.

 

 적절한 JQuery의 활용은 물론, 

자신이 만든 코드를 적절히 모듈화해서 사용하는것이 아주 중요할 것 같다 !

 

 

UI   와   API

 UI 는, user interface 로,

일반 사용자가 프로그램을 동작하는 수단이라고 할 수있다.

이것은 구글 검색창의 UI 라고 할 수 있고,

일반 사용자는 해당 인터페이스를 통해 키워드를 검색 하는 등의 동작을 지시할 수 있다.

 

 

 

 

API 는, Application Programming Interface 로,

프로그램이 동작하는 환경을 제어하기 위해서 환경에서 제공되는 조작 장치이다.

 

위의 구글 UI를 나타내기 위해서,

프로그래밍 언어를 통해 웹 브라우저를 조작하는것을 API 라고 할 수 있겠다.

 

 

 

 

머리로는 이해를 했는데 글로 쓰려니까 뭔가 어렵다..

잘 이해 한거겠지?

 

'사전캠프' 카테고리의 다른 글

23일차 - 알고리즘 풀이  (3) 2024.07.22
22일차 - 알고리즘 풀이  (0) 2024.07.19
20일차 - Javascript 입문 수업  (0) 2024.07.17
19일차 - Javascript 입문 수업  (1) 2024.07.16
18일차 - [왕초보] 웹개발 종합반  (0) 2024.07.15

 

 

어제 보류했던 알고리즘 문제를 다시 살펴보자.

 

배열에 대해 배웠으니 말이다.

 

 

 

reverse를 사용해보자

function solution(n) {
    var answer = 0;
    n.reverse();
    answer = n;
    return answer;
}

 

당연히 안되겠지 !

 

n은 배열이 아니라 하나의 자연수일 뿐이다.

 

n이라는 숫자열을 자릿수를 쪼개서 배열화 시키는 법을 알아야한다.

 

 

이 문제가 왜이렇게 어렵게 다가오는지 모르겠다...

 

 

우선

n= n.toString();

n= n.split('');

n을 문자열 및 배열로 풀어보았다

 

배열이 되었다 !

 

 

 

reverse !!

 

 

아앗...

reverse는 내림차순 정렬이 아니라 그냥 앞뒤로 뒤집을 뿐이었다.

 

 

그러면 sort and reverse !!

 

그럴싸한 배열이 되었다

 

join(''); 으로 각 원소를 붙여보자

 

오오오오오오오5

숫자열로 반환하면 끝 !!

 

function solution(n) {
    var answer = 0;
    n = n.toString();
    n = n.split('');
    n = n.sort();
    n = n.reverse();
    n = n.join('');
    answer = Number(n);
    return answer;
}

결과적으로 이런 코드가 되었다

좀 깔끔하게 만들면

function solution(n) {
    var answer = 0;
    n = n.toString().split('').sort().reverse().join('')
    answer = Number(n);
    return answer;
}

이렇게 쓸 수 있겠다.

 

쉽지않다..

 

 

 

Javascript 입문 수업

 

객 체

 

 

객체 (object) 는 쉽게 말해, 업그레이드된 배열이라고 할 수 있다.

 

원소와 원소의 순번인 index 로 구성된 배열과 달리

 

객체는 밸류(value) 와 키(key) 로 구성이 된다.

배열과 비슷해 보이지만, 순서가 없다는 특징이 있고, 

키값에는 임의 숫자는 물론 문자열과 변수, 함수, 심지어 객체 안에 객체가 들어갈 수도 있다.

 

객체는 {} 중괄호, 'key' : value , 를 통해 만들어 진다.

 

 

 

for in 문

 

따로 조건 지정이 없을 없을 때, 해당 객체에 있는 모든 키값을 순회하는 변수 key를 지정한다

모든 키값이 변수  key에 쓰여질 때까지 반복된다고 할 수 있다.

 

위의 예시를 보면, 

grades[key] 를 사용하는것으로 해당 grades(객체의 변수) 안에 있는 [key] 와 일치하는 

데이터의 value 를 표시하게 할 수 있다.

 

 

this  

this 는 해당 this가 소속되어있는 객체를 지칭하는 녀석이다. (객체에서는)

이 객체의~   라고 해석하면 얼추 맞는 듯 하다.

 

위의 예시처럼, grades 객체 내의 내용일 경우,  this는  기본적으로 grades를 표시한다.

즉, this.list =  grades.list 와 동일하게 작동한다고 할 수 있다.

 

객체변수의 이름이 바뀐다거나 하는 상황에서 this는  바꿀 필요가 없기 때문에 유리하고

긴 코드에서 객체명을 기억해낼 필요 없이 바로바로 쓰기 편리하다는 장점이 있다.

 

 

'사전캠프' 카테고리의 다른 글

22일차 - 알고리즘 풀이  (0) 2024.07.19
21일차 - Javascript 입문 수업  (0) 2024.07.18
19일차 - Javascript 입문 수업  (1) 2024.07.16
18일차 - [왕초보] 웹개발 종합반  (0) 2024.07.15
17일차 - Javascript 입문 수업  (0) 2024.07.12

사실,   알고리즘 문제를 몇개 풀고난 뒤에 학습을 시작하려고 했다.

 

그러나 javascript 의 기본지식이 너무 없는 탓에 

 

다른사람의 풀이를 참고해서 그 중 모르는것을 학습하는

기존의 방법은 더 이상 불가능했다.

 

 

 

문제 풀이를 위한 함수도 모르고, 배열에 대한 이해도 부족한 상황에서 

다른 사람의 풀이를 본다고 해도, 하나부터 열까지 다 배워야 한다.

 

효과적인 학습 방법이 아니며, 원하는 방향도 아니기에 

알고리즘 풀이는 잠시 보류하기로 하였다.

 

 

마침, 오늘 배울 내용은

[ '배열 ' ]  이다.

 

물론 처음 보는것은 아니다.

 var a = ['1','3','5']

위 처럼, 하나의 변수 a에 리스트의 형태로 여러개의 값이 저장된 데이터 형태를 배열 이라고 한다.

 

배열에 들어있는 각각의 데이터를 원소(Element)  라고 하고, 

각 원소의 순번을 색인(index) 라고 한다.

 

주의사항으로는 index 는 0 부터 시작한다 ! 

 

배열의 조작

우선 가장 기본적인것은

length 

 var a = ['1','3','5']  일 때,

a.length 를 통해서 배열의 크기 =  배열안에 담긴 원소의 수 를 나타낼 수 있다.

위의 경우, 세 개의 원소를 가지고 있으므로 a.length  = 3을 표시한다.

 

열받는 부분은  index 는 0부터 시작해서 0,1,2 이지만

length 는 1,2, 3 으로 센다는 것이다

 

카운팅넘버링의 차이를 잘 기억해야 할 것이다.

 

 

추가

arr.push('a')

arr배열의 끝에 'a' 라는 원소를 새로 추가한다. 

 

arr.concat(['a','b']) 

arr 배열의 끝에 'a' , 'b' 모두 추가한다.

배열의 형식을 갖기에 복수의 원소를 추가할 수 있다.

 

arr.unshift('a') 

arr 배열의 시작에 'a'를 추가한다.  'a' 의 index는 0이 되고 기존의 원소들은 1씩 밀리게 된다.

 

arr.splice(x,y, 'a');

splice는 x 번째 인덱스 부터 , y숫자만큼의 원소를 제거하고 , 'a' 를 그 자리에 추가한다.

이 때, 3번째 인자는 필수가 아니므로 비워둘 수도 있다.

 

 

제거

arr.shift(); 

arr 배열의 첫번째 원소를 제거한다.

 

arr.pop();

arr 배열의 끝 원소를 제거한다.

 

정렬

arr.sort(); 

arr배열을 정해진 방식에 따라 정렬한다. 

기본적으로 숫자, 알파벳 등을 오름차순 정렬 한다.

 

arr.reverse();

arr 배열을 역순으로 정렬한다.

 

 

+ Recent posts