코딩 테스트 일기 # 01

윤수빈·2024년 7월 11일
0

1. SQL

SQL 코딩 테스트를 진행하다가 정답이 맞는데 도저히 맞지 않아서 10분을 헤맸던 것 같다.

진행 문제: 고양이와 개는 몇 마리 있을까

select ANIMAL_TYPE, count(1) as count
from
(SELECT ANIMAL_TYPE, NAME
from ANIMAL_INS
where ANIMAL_TYPE in ('Cat', 'Dog')
) a
group by 1

위 코드로 진행을 했는데 정답 예시와 동일한데도 오답이 나왔다..

뭐지? 해서 계속 보다가

  1. Cat 혹은 Dog 가 오타가 있나? 해서 like문으로 변경 (오답)
    where ANIMAL_TYPE like '%Cat%' or ANIMAL_TYPE like '%Dog%'
  2. 서브쿼리를 사용하면 안되나? 해서 case 문으로 변경 (오답)
select ANIMAL_TYPE,
	case when ANIMAL_TYPE = 'Cat' then count('Cat')
		 when ANIMAL_TYPE = 'Dog' then count('Dog') end count
from ANIMAL_INS
group by 1

알고 보니, CAT 먼저 정렬해달라는 것이 있었다.
order by가 없어도 CAT 먼저 정렬되었길래 넘겼었는데 오답이 된 것이었다...

처음에 짠 쿼리에 order by 1 추가해주니 정답 처리 되었다 ㅠ


2. JavaScript

진행 문제 : 나누어 떨어지는 숫자 배열

이번에는 정렬 부분에서 잘 되지 않아서 조금 헤맸다.

입출력 예)

arrdivisorreturn
[5, 9, 7, 10]5[5, 10]
[2, 36, 1, 3]1[1, 2, 3, 36]
[3,2,6]10[-1]

(오답 코드)

function solution(arr, divisor) {
    let answer = [];
    arr.forEach(e => {
        if ((e%divisor)===0) {
            answer.push(e);
        }
    })
    if (answer.length === 0)
        answer.push(-1);
        
    return answer.sort();
}

2, 3 번은 잘 되는데 1번이 정렬이 내림차로 거꾸로 되는 상황이 발생했다..
그래서 Array 함수 정렬부분을 다시 복습하고 오름차순으로 확실하게 정렬하게끔 바꾸어 주니 정답 처리 되었다.

(정답 코드)

function solution(arr, divisor) {
    let answer = [];
    arr.forEach(e => {
        if ((e%divisor)===0) {
            answer.push(e);
        }
    })
    if (answer.length === 0)
        answer.push(-1);
    
    // 오름차순 정렬
    answer.sort((a,b) => {
        return a > b ? 1 : -1;
    });
    return answer;
}

(정확성 및 속도)


(다른 사람 풀이) 다른 사람 풀이로 보니 filter(), map() 함수를 활용한 것도 있었다. 특히, filter()를 사용한 풀이는 처리 속도가 40-50퍼는 빨랐다.

앞으로 비슷한 문제에서 filter() 함수를 사용해봐야겠다.

profile
정의로운 사회운동가

0개의 댓글