1. SQL
: 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.
from ANIMAL_INS ani left join ANIMAL_OUTS ano on ani.ANIMAL_ID=ano.ANIMAL_ID
where ano.DATETIME is null
key 값은 다른거로 해도 무방order by ani.DATETIME
limit 3
order by 마지막에 LIMIT 키워드 사용SELECT ani.NAME, ani.DATETIME
from ANIMAL_INS ani left join ANIMAL_OUTS ano on ani.ANIMAL_ID=ano.ANIMAL_ID
where ano.DATETIME is null
order by ani.DATETIME
limit 3
상위 3마리만 출력하는 부분이 기억이 안나서 혹시나 별도 키워드가 있는지 찾아보던 와중에 RDBMS 별 문법 차이가 있는 것과 LIMIT
이라는 키워드를 알게되었다.
RDBMS | Function |
---|---|
MS-SQL | SELECT Top N, Top N with ties |
ORACLE | WHERE rownum < N+1 |
MySQL | LIMIT N |
이 중에 MySQL이 가장 보기 편해보이고 명확해보였다.
그리고 코테에서 MS-SQL 사용해보니 오류가 발생하기도 했다.
MS-SQL은 SELECT 절에서 사용하는 점,
ORCLE은 WHERE 절에서 사용하는 점이 특징이고,
MySQL은 구문 제일 마지막에 사용하면 되었다.
2. JavaScript
: 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
n | return |
---|---|
3 | 수박수 |
4 | 수박수박 |
function solution(n) {
var answer = '';
let count=1;
while(count<=n) {
count%2!==0 ? answer += '수' : answer += '박';
count++;
}
return answer;
}
처리 속도가 불안정하고, 느리다고 생각되어서 다른 풀이를 고민해 보았다.
substr(), map(), repeat() 등 다양한 풀이가 있었는데 repeat() 함수가 이름부터 반복적인 것에 최적인 것 같아 사용해보았다.
repeat() 함수는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.
파라미터로 하나를 받을 수 있다.
"abc".repeat(-1); // RangeError
"abc".repeat(0); // ''
"abc".repeat(1); // 'abc'
"abc".repeat(2); // 'abcabc'
"abc".repeat(3.5); // 'abcabcabc' (count will be converted to integer)
"abc".repeat(1 / 0); // RangeError
({ toString: () => "abc", repeat: String.prototype.repeat }).repeat(2);
// 'abcabc' (repeat() is a generic method)
n 만큼 반복해야하는데 수->박->수-> ... 형식으로 어떻게 출력할 지 고민이 되었다.
기존 풀이대로 한다면 n을 기준으로 홀수/짝수를 조건을 주면 박으로 시작하는 경우도 생길 것 같았다.
ex) n%2 ? '박' : '수' 조건일 때 n이 짝이면 박부터 시작하는 상황..
그래서 생각해본건 repeat() 예제에서 소수점이 있는 경우였다.
"abc".repeat(3.5); // 'abcabcabc'
내림이 되어 3번 반복 된 것을 확인할 수 있는데 이 경우를 활용해서
'수박'을 하나로 두면 2배길이가 될거니까 반을 나누자고 생각했다.
ex) '수박'.repeat(n/2)
그래서 n/2 반복하는데 만약 n이 1이라면 '수'가 나와야 할텐데 아무것도 나오지 않는 상황 + '수박'만 출력될 것이다.
ex) '수박'.repeat(n/2) -> n=1, '' + n=n, '수박수박...수박'
이럴 경우를 대비해서 마지막에 n이 홀수인지 짝수인지 확인하여 '수' 를 확인하고, 최종적으로 결과를 붙인다면 잘 나오지 않을까 생각했다.
ex '수박'.repeat(n/2) + (n%2!==0 ? '수' : '')
괄호 무조건 필수..
function solution(n) {
let answer = '';
return answer = '수박'.repeat(n/2) + (n%2!==0 ? '수' : '');
}
결과는 성공!
3. 마무리
SQL에서는 LIMIT 키워드를 통해 상위 n 개 row만 조회하는 방법을 배우고,
JS에서는 repeat() 함수를 배우면서 기존 코드를 최적화했다.
처리 속도도 훨씬 빠르고 안정적이어서 굉장히 뿌듯했다.
repeat() 함수를 처음 활용해보면서 배우는 시간이 되었다.