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
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를 초기화
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;
}
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 에서 가장 대표적인 모듈 모음집, 라이브러리 라고 할 수 있다.
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를 표시한다.