[99클럽 코테 스터디 24일차 TIL] 정렬

qk·2024년 6월 21일
0

회고

목록 보기
24/33
post-thumbnail

📖 오늘의 학습 키워드
정렬

오늘의 회고

문제

[Minimum Lines to Represent a Line Chart]
https://leetcode.com/problems/minimum-lines-to-represent-a-line-chart/description/

나의 해결

class Solution {
    public int minimumLines(int[][] stockPrices) {
        if(stockPrices.length == 1) {
            return 0;
        }
        Arrays.sort(stockPrices, (a, b) -> a[0] - b[0]);
        int answer = 1;
        for(int i = 2; i < stockPrices.length; i++) {
            if((stockPrices[i-1][1] - stockPrices[i][1]) * (stockPrices[i-2][0] - stockPrices[i-1][0]) != (stockPrices[i-2][1] - stockPrices[i-1][1]) * (stockPrices[i-1][0] - stockPrices[i][0])) {
                answer++;
            }
        }
        return answer;
    }
}
  1. 배열 stockPrices 내 원소가 하나라면 선이 그려지지 않으므로 0을 반환한다.
  2. 첫 번째 원소가 날이기 때문에 이를 기준으로 stockPrices를 정렬한다.
    stockPrices[i] = [dayi, pricei]
  3. 배열의 길이가 2개 이상이면 적어도 하나의 선이 그려지므로 answer의 초깃값을 1로 설정한다.
  4. i가 2부터 stockPrices의 길이보다 작을 때까지 for 문으로 돌며 아래 조건문을 만족하면 answer 값을 하나 늘린다.
     if((stockPrices[i-1][1] - stockPrices[i][1]) * (stockPrices[i-2][0] - stockPrices[i-1][0]) != (stockPrices[i-2][1] - stockPrices[i-1][1]) * (stockPrices[i-1][0] - stockPrices[i][0]))
    조건문은 아래 식과 같으며, 직전의 기울기와 현재 기울기가 같은지를 확인한다. 기울기가 다르면 이전과 다른 새로운 선을 그려야 하므로 answer의 값을 늘려야 한다.

새로 학습한 내용

처음에는 기울기를 y의 값의 증가량을 x의 값의 증가량으로 나눈 값으로 구해 직전의 기울기와 비교했다. 하지만 이를 제출하면 후반 테스트 케이스에서 문제가 발생했다. 라이브 세션 때 멘토님께서 코딩테스트에서 나누기가 필요한 경우 최대한 곱하기로 바꿔서 풀어보라고 이야기해주셨다.

0개의 댓글