매일 Algorithm

신재원·2023년 4월 11일
0

Algorithm

목록 보기
93/243

백준 11004번 (Silver 5)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class problem298 {

    public static void main(String[] args) throws IOException {
        // 시간초과 이유로 인해 버퍼로 입력값을 받는다.
        BufferedReader br = 
        	new BufferedReader(new InputStreamReader(System.in));
            
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int n = Integer.parseInt(st.nextToken());
        int index = Integer.parseInt(st.nextToken());
        int[] arr = new int[n];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        System.out.println(arr[index - 1]);

    }
}

백준 11536번 (Silver 5)

import java.util.Scanner;

public class problem299 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] arr = new String[n];

        for (int i = 0; i < n; i++) {
            arr[i] = in.next();
        }

        // 오름차순, 내림차순 검증
        boolean INCREASING = true;
        boolean DECREASING = true;


// compareTo : 두 문자열을 사전식으로 비교,
// 반환값이 0보다 작으면 첫번째 문자열이 두번째 문자열보다 사전식으로 앞서는것이고,
// 반환값이 0보다 크면 첫번째 문자열이 두번째 문자열보다 사전식으로 느린것이다.
        for (int i = 1; i < n; i++) {
            if (arr[i].compareTo(arr[i - 1]) > 0) {
                // 조건은 오름차순인데, 내림차순을 false해준다.
                DECREASING = false;
            } else if (arr[i].compareTo(arr[i - 1]) < 0) {
                INCREASING = false;
            }
        }

        if (INCREASING) {
            System.out.println("INCREASING");
        } else if (DECREASING) {
            System.out.println("DECREASING");
        } else {
            System.out.println("NEITHER");
        }
    }
}

백준 7562번 (Bronze 1)
// 많이 어려웠던 문제.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;


public class problem275 {
    // x,y 좌표로 이동할수있는 경우의수 8가지
    static int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2};
    static int[] dy = {1, 2, 2, 1, -1, -2, -2, -1};


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();


        // t가 0이 될떄까지
        while (t-- > 0) {
            int n = in.nextInt(); // 체스판의 한 변의 길이
            int[][] graph = new int[n][n];

            int startX = in.nextInt(); // x의 시작위치
            int startY = in.nextInt(); // y의 시작위치
            int endX = in.nextInt(); // x의 도착위치
            int endY = in.nextInt(); // y의 도착위치

            Queue<int[]> q = new LinkedList<>();
            q.offer(new int[]{startX, startY}); // 시작위치 q의 저장
            graph[startX][startY] = 1; // 이동횟수

            while (!q.isEmpty()) {
                int[] temp = q.poll();
                int x = temp[0];
                int y = temp[1];

                // 현재위치가 목표의 위치에 도달했을경우
                if (x == endX && y == endY) {
                    System.out.println(graph[x][y] - 1);
                    break;
                }


                for (int i = 0; i < 8; i++) {
                    int mX = x + dx[i];
                    int mY = y + dy[i];

                    // 범위 체크
                    if (mX < 0 || mX >= n || mY < 0 || mY >= n) continue;
                    if (graph[mX][mY] != 0) continue;

                    graph[mX][mY] = graph[x][y] + 1;
                    q.offer(new int[]{mX, mY});
                }
            }
        }


    }
}

0개의 댓글