2023.06.04.SUN

ronglong·2023년 6월 4일
0

[ 백준 ]

  • 1717번 집합의 표현
    : 유니온 파인드 문제 공부. else 구문 2번 빼먹어서 계속 값이 이상하게 나왔다.
    코드가 무조건 간결한 것보다는 정확한 게 더 중요한 것 같다는 생각을 했다.
    모든 구문을 빠짐없이 쓰는 습관을 들여야겠다.
import java.io.*;
import java.util.*;

public class Main {
    public static int[] arr;

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

        //입력값 받기
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(stringTokenizer.nextToken());
        int M = Integer.parseInt(stringTokenizer.nextToken());

        //유니온 파인드 문제.

        //유니온 파인드 일차원 배열 만들기 및 루트 초기화
        arr = new int[N + 1];
        for (int i = 1; i <= N; i++) {
            arr[i] = i;
        }

        //0 a b -> a와 b를 같은 집합으로 묶기(대표 노드끼리 연결)
        //1 a b -> a와 b가 같은 집합인지 확인 후 출력
        for (int i = 0; i < M; i++) {
            stringTokenizer = new StringTokenizer(br.readLine());
            int first = Integer.parseInt(stringTokenizer.nextToken());
            int a = Integer.parseInt(stringTokenizer.nextToken());
            int b = Integer.parseInt(stringTokenizer.nextToken());

            if (first == 0) {
                union(a, b);
            } else {
                if (checkSame(a, b)) System.out.println("YES");
                else System.out.println("NO");
            }
        }
    }

    private static void union(int a, int b) {
        a = find(a);
        b = find(b);
        if (a != b) {
            arr[b] = a;
        }
    }

    private static boolean checkSame(int a, int b) {
        a = find(a);
        b = find(b);
        return a == b;
    }

    private static int find(int a) {
        if (a == arr[a]) return a;
        else return arr[a] = find(arr[a]);
    }
}
  • 1976번 여행 가자
    : 문제만 보고 유니온 파인드 문제라고 바로 유추하기 어렵다.
    문제 유형 파악이 제일 어려운 듯.
    해설지 풀이에 작성된 슈도코드를 토대로 코드를 짜서 통과했다.
    해설지와 비교했을 때 조금 다르게 구현한 부분은 스트림 사용했다는 것 정도.
    내가 코테에서 난항을 겪는 건 제대로 된 슈도코드를 짜는 게 아직 미숙해서 그런 것 같다.
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static int[][] matrix;
    public static int N, M;
    public static int[] root;

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

        //입력값 받기
        N = Integer.parseInt(br.readLine());
        M = Integer.parseInt(br.readLine());

        //초기화 및 연결
        matrix = new int[N][N];
        StringTokenizer stringTokenizer;
        for (int i = 0; i < N; i++) {
            stringTokenizer = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                matrix[i][j] = Integer.parseInt(stringTokenizer.nextToken());
            }
        }

        root = new int[N+1];
        for (int i = 1; i <= N; i++) {
            root[i] = i;
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (matrix[i][j] == 1) unoin(i, j);
            }
        }

        String[] cities = br.readLine().split(" ");
        List<Integer> list = Arrays.stream(cities)
                .map(Integer::parseInt)
                .map(i -> find(i - 1))
                .distinct().collect(Collectors.toList());

        if(list.size()==1) System.out.println("YES");
        else System.out.println("NO");
    }

    private static void unoin(int i, int j) {
        i = find(i);
        j = find(j);
        if (i != j) root[j] = i;
    }

    private static int find(int i) {
        if (i == root[i]) {
            return i;
        } else return root[i] = find(root[i]);
    }
}

[ 유어클래스 다시 읽기 ]

  • section4. Spring Security 인증 구성요소 이해
    : Spring Security Filter, UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter), Authentication, AuthenticationManager(ProviderManager), AuthenticationProvider(DaoAuthenticationProvider), UserDetailsService, SecurityContext

[ 느낀 점 ]

오전 SQL 노랭이 풀이 완료.
월화 이틀은 면접 준비 열심히 하고, 수목금엔 SQLD 시험 준비 마저 해야겠다.

0개의 댓글