[Career] 코테 내용

25년 07월 09일 16:55CareerCareer

모든 알파벳을 사용하는 문자열 검사 (100/100)

문자열 sentence 를 함수의 인자로 받는데 알파벳, 공백, 특수문자로 이루어져있다.

  • sentence 에서 사용하지 않는 소문자 알파벳들을 return.
  • 완벽한 문자열은 perfect return
function solution(sentence) {
  // 소문자 빼고 제거 후 정렬
  const sortedStr = sentence.toLowerCase().match(/[a-z]/g).sort(); // 중복 제거
  const uniqueAlphabets = sortedStr.filter(
    (item, pos) => sortedStr.indexOf(item) == pos
  );
  const lowerStr = new Array(26)
    .fill()
    .map((d, i) => String.fromCharCode(i + 97))
    .join('');
  const missingLetters = lowerStr
    .split('')
    .filter((letter) => !uniqueAlphabets.includes(letter))
    .join(''); // 완벽한 문자열일 경우

  if (missingLetters.length === 0) {
    return 'perfect';
  }

  return missingLetters;
}

좋은 부분 문자열 개수 찾기 (100/100)

좋은 부분 문자열: 어떤 문자열 s의 부분 문자열이면서 같은 알파벳이 두 번 이상 나타나지 않는 문자열을 말합니다. 예를 들어 주어진 문자열이 "abac"일 때, 부분 문자열 "a","ab","bac" 등은 원래 문자열 "abac" 의 부분 문자열이면서 문자열 내에 같은 알파벳이 두 번 이상이 나타나지 않으므로 좋은 부분 문자열입니다. 그러나 "aba", "abac"는 문자열 내에 같은 알파벳 'a'가 두 번 이상 나타나므로 좋은 부분 문자열이 아닙니다. 문자열 s가 주어질 때 좋은 부분 문자열의 개수를 return

문자열 s의 길이는 1 이상 500 이하이며, 알파벳 소문자로만 이루어져 있다.

function solution(s) {
  const answer = new Set(); // 모든 문자 조합
  for (let i = 0; i < s.length; i++) {
    for (let j = i + 1; j <= s.length; j++) {
      const substr = s.substring(i, j); // 부분 문자열에 중복 문자가 없으면 추

      if (new Set(substr).size === substr.length) {
        answer.add(substr);
      }
    }
  }
  return answer.size;
}

키보드 타이핑 문자열 s의 복잡도 계산 (26.3/100)

타이핑 배열에서 s의 복잡도의 합을 계산하여 return s의 복잡도: s 내에서 인접한 모든 문자 사이의 거리의 합 문자 사이의 거리 : 키보드 상에 떨어진 수평거리 + 수직거리

const rows = ['qwertyuio', 'pasdfghjk', 'lzxcvbnm'];

// 키보드 레이아웃 생성
const keyboardLayout = {};
rows.forEach((row, y) => {
  for (let x = 0; x < row.length; x++) {
    const key = row[x];
    keyboardLayout[key] = [x, y];
  }
});

function calculateComplexity(s) {
  let complexity = 0;
  if (s.length < 2) return complexity;
  for (let i = 0; i < s.length - 1; i++) {
    const pos1 = keyboardLayout[s[i]];
    const pos2 = keyboardLayout[s[i + 1]];
    const distance = Math.abs(pos1[0] - pos2[0]) + Math.abs(pos1[1] - pos2[1]);
    complexity += distance * (s.length - i - 1) * (i + 1);
  }
  return complexity;
}

function solution(s) {
  return calculateComplexity(s);
}

SQL

전기차 where 조건찾기 (100/100)

"최대 속력이 150 이상이고 10시간 이내로 충전되는 차를 보여달라" 라고 하였다. 이 손님이 원하는 차의 정보를 아이디 순으로 조회하는 SQL 문을 작성.

SELECT ID,MODEL,TOP_SPEED, CAPACITY, CHARGING_TIME, NOMINAL_RANGE FROM ELECTRIC_CARS
    WHERE TOP_SPEED >= 150 AND CHARGING_TIME <= 10
    ORDER BY ID ASC

자동차 회사 판매 사원 분류 (100/100)

사원의 ID와 분류 상태, 사원이 판매한 자동차 수를 나타내는 SQL문을 작성. 이때 분류 상태는 자동차를 4대 이상 판매한 사원은 '최우수 사원', 2대 혹은 3대를 판매한 사원은 '우수 사원', 1대를 판매한 사원은 '일반 사원' 으로 표시해야 한다. 결과는 사원의 ID를 기준으로 오름차순 정렬해주세요.

SELECT

    EMPLOYEE_ID,
    CASE
        WHEN COUNT(CAR_ID) >= 4 THEN '최우수 사원'
        WHEN COUNT(CAR_ID) BETWEEN 2 AND 3 THEN '우수 사원'
        WHEN COUNT(CAR_ID) = 1 THEN '일반 사원'
    END AS '분류 상태',
    COUNT(CAR_ID) AS 'COUNT'
FROM
    SELLINGS
GROUP BY
    EMPLOYEE_ID
ORDER BY
    EMPLOYEE_ID ASC;

전기차 컬럼은 장바구니에 담긴 상품 수의 잘못된 값 찾기

CARTS 테이블의 PRODUCT_COuNT 컬럼은 장바구니에 담긴 상품 수를 캐싱하는 컬럼입니다. 지난밤 이 컬럼이 업데이트되지 않는 버그가 발생했습니다. 캐싱이 잘못된 장바구니의 아이디, 잘못 들어간 값, 올바른 값을 조회하는 SQL문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야한다.

SELECT C.ID AS CART_ID, C.PRODUCT_COUNT AS WRONG_VALUE, COUNT(CP.ID) AS CORRECT_VALUE FROM CARTS C
    JOIN CART_PRODUCTS CP ON C.ID = CP.CART_ID
    GROUP BY C.ID
    HAVING C.PRODUCT_COUNT <> COUNT(CP.ID)
    ORDER BY C.ID ASC