2023.05.12.FRI

ronglong·2023년 5월 12일
0

[ 프로그래머스 ]

  • 최대공약수와 최소공배수
    : 최대공약수 알고리즘은 알고 있었으나, 최소공배수의 성질을 몰라서 찾아봤다.
    a와 b의 최소공배수 LCM == a*b/GCD
    https://imkh.dev/algorithm-gcd-lcm/
class Solution {
    public int[] solution(int n, int m) {
        int gcd = GCD(n, m);
        int lcm = n*m / gcd;
        return new int[]{gcd, lcm};
    }

    public int GCD(int x, int y){
        if(x%y==0) return y;
        return GCD(y, x%y);
    }
}
  • 올바른 괄호
    : 시간 효율성 테스트가 까다로웠다. 효율성 테스트에서만 계속 실패. 꽤 오래 붙잡은 문제.
    replaceAll()로 치환하는 로직 빼고,
    처음에 예외 상황 처리하는 조건에 s.startsWith(")") || s.endsWith("(") 있었는데, 뺐더니 통과됨.
import java.util.*;

class Solution {
    boolean solution(String s) {
        //예외 상황 미리 처리하기
        if( s.length()%2==1) return false;
        // s = s.replaceAll("()", "");
        // if(s.length()==0) return true;

        char[] arr = s.toCharArray();
        int count =0;
        for(int i=0; i<arr.length; i++){
            if(arr[i]=='(') count++;
            else count--;
            if(count <0) return false;
        }   
        return count==0;
    }
}

[ 백준 ]

  • 11399번 ATM
    : 슈도코드를 제대로 작성 안 하고 머리로 대충 생각하고 무작정 코드부터 썼더니, 정렬 이후의 계산 로직에서 몇 번 틀림. 슈도코드 작성을 빼먹지 말자.
    합 배열 쓰는 것에 익숙해지면 좋을 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언

        //입력값 받기
        int num = Integer.parseInt(br.readLine());

        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());

        //인출 시간의 최소 합 구하기 -> 첫 번째부터 n-1번째 까지의 누적 합이 적은 순서 -> 작은 순서로 정렬
        int[] times = new int[num];

        for(int i=0; i<num; i++){
            times[i] = Integer.parseInt(stringTokenizer.nextToken());
        }

        Arrays.sort(times);

        int answer = 0;
        for(int i=0; i<num; i++){
            answer += times[i] * (num-i);
        }
        System.out.println(answer);
    }
}
  • 11004번 K번째 수
    : 다음엔 피벗을 이용한 퀵 정렬로 풀어보기..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언

        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
        int num = Integer.parseInt(stringTokenizer.nextToken());
        int k = Integer.parseInt(stringTokenizer.nextToken());

        stringTokenizer = new StringTokenizer(br.readLine());
        int[] nums = new int[num];
        for(int i=0; i<num; i++){
            nums[i] = Integer.parseInt(stringTokenizer.nextToken());
        }

        Arrays.sort(nums);
        System.out.println(nums[k-1]);
    }
}

[ 유어클래스 다시 읽기 ]

  • section2. 웹 애플리케이션 작동원리
    : IP(Network IP + Host IP), TCP, UDP, subnet, port, URL, URI, DNS

[ 칼퇴족 김대리는 알고 나만 모르는 SQL ]

  • ORDER BY로 정렬할 때, 열 이름열 위치 모두 사용할 수 있다.
    하지만 열 위치의 경우, SELECT문 뒤에 선택된 열이 아니면 정렬할 수 없으며, SELECT문 뒤에 출력되는 열의 위치가 바뀌면 ORDER BY절 뒤의 열 위치도 변경해야 하므로, 열 이름을 이용하여 정렬하는 것이 더 나아보인다.
  • 정렬 기본값은 ASC(오름차순)
  • DISTINCT 키워드는 집계 함수와 하부 쿼리에서 주로 사용된다.
    ex. SELECT COUNT(DISTINCT GRADE) FROM CUSTOMER;

[ 느낀 점 ]

정렬 문제에서 자주 출제된다는 퀵 정렬병합 정렬 문제에서 오늘 막혔다.
손으로 풀어봐야겠다.

SQL 공부도 시작했다.
이번주는 아프기도 하고 일정도 있어서 공부량이 좀 적었다.
다음주는 더 열심히 해야겠다. 🔥🔥🔥🔥🔥

0개의 댓글

Powered by GraphCDN, the GraphQL CDN