'6월 19일' 마흔다섯 번째 기록 [TIL]

가은·2024년 6월 19일
0

I Learned [본 캠프]

목록 보기
73/135
post-thumbnail

👩‍🏫 오늘의 출석

❓마흔다섯 번째, 9 to 9을 해 본 소감❓

IntelliJ에서 제공하는 기능으로 깃헙 push, pull, clon 등을 했는데 이번 프로젝트부터는 터미널을 이용해서 사용하려고 하는데 왜 내 터미널은 글씨가 이렇게 나오는 걸까.. 글자가 깨지는 건 아닌데 뭔가 마음에 안 들어..

📑오늘 학습한 내용

🧩오늘의 알고리즘 : 덧칠하기 🧩

문제 : 어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리 · 학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트를 덧칠하기로 했습니다.

넓은 벽 전체에 페인트를 새로 칠하는 대신, 구역을 나누어 일부만 페인트를 새로 칠 함으로써 예산을 아끼려 합니다. 이를 위해 벽을 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다. 그리고 페인트를 다시 칠해야 할 구역들을 정했습니다.

벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 롤러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다.

  • 롤러가 벽에서 벗어나면 안 됩니다.
  • 구역의 일부분만 포함되도록 칠하면 안 됩니다.

즉, 롤러의 좌우측 끝을 구역의 경계선 혹은 벽의 좌우측 끝부분에 맞춘 후 롤러를 위아래로 움직이면서 벽을 칠합니다. 현재 페인트를 칠하는 구역들을 완전히 칠한 후 벽에서 롤러를 떼며, 이를 벽을 한 번 칠했다고 정의합니다.

한 구역에 페인트를 여러 번 칠해도 되고 다시 칠해야 할 구역이 아닌 곳에 페인트를 칠해도 되지만 다시 칠하기로 정한 구역은 적어도 한 번 페인트칠을 해야 합니다. 예산을 아끼기 위해 다시 칠할 구역을 정했듯 마찬가지로 롤러로 페인트칠을 하는 횟수를 최소화하려고 합니다.

정수 nm과 다시 페인트를 칠하기로 정한 구역들의 번호가 담긴 정수 배열 section이 매개변수로 주어질 때 롤러로 페인트칠해야 하는 최소 횟수를 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ m ≤ n ≤ 100,000
  • 1 ≤ section의 길이 ≤ n
    • 1 ≤ section의 원소 ≤ n
    • section의 원소는 페인트를 다시 칠해야 하는 구역의 번호입니다.
    • section에서 같은 원소가 두 번 이상 나타나지 않습니다.
    • section의 원소는 오름차순으로 정렬되어 있습니다.
class Solution {
    public int solution(int n, int m, int[] section) {
        int roller = section[0];
        int cnt = 1;
        for(int i = 1; i < section.length; i++) {
            if(roller + m - 1 < section[i]) {
                cnt++;
                roller = section[i];
            }
        }
        return cnt;
    }
}

🧩 오늘의 SQL : 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 🧩

문제 : CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

SELECT CAR_ID,
    MAX(CASE
        WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중' 
        ELSE '대여 가능'
    END) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 1
ORDER BY 1 DESC;

와.. 어렵다.. MAX 생각도 못했는데 와중에 서브쿼리문으로 푸신 분들도 많았다.. 나는 정말 SQL 애송이구나~!

오전에는 팀 프로젝트(아웃소싱) 발제가 있었고, 이후에는 팀원들과 프로젝트 주제, API 명세서, ERD 작성을 하며 시간을 보내고 2시부터는 개발자 취업을 위한 면접 특강 실시간 세션을 들으며 다음 주에 있을 2차 모의 면접을 어떤 마음가짐으로, 어떤 것에 포인트를 두고 보면 좋을지 감을 잡는 시간을 가졌다. 아무래도 나는 긴장을 많이 하는 편이라 면접을 볼 때 최대한 긴장하지 말고 떨지 말자는 것에 중점을 두는데 오늘 세션을 통해서 면접은 대화하는 것이라는 것을 다시 한번 리마인드 하며 다음 주에 있을 모의 면접에서는 대화한다는 느낌으로 임해야겠다고 생각했다. 그리고 이후에는 오전에 다 하지 못했던 알고리즘 문제를 풀고, 블로그 정리도 하고 저녁을 먹고 팀 프로젝트 코드를 짜기 시작했다.

0개의 댓글