매일 Algorithm

신재원·2023년 4월 27일
0

Algorithm

목록 보기
108/243

백준 6550번 (Silver 5)

import java.util.Scanner;

public class problem350 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 다음 입력이 없을때 까지 반복
        while (in.hasNextLine()) {
            // 공백을 기준으로 배열로 나눔
            String[] inputString = in.nextLine().split(" ");


            int index = 0;

            // 문자 비교
            for (int i = 0; i < inputString[1].length(); i++) {
                if (inputString[0].charAt(index) ==
                        inputString[1].charAt(i)) {
                    index++;
                }

                // index가 inputString의 길이랑 같을때 break
                if (index == inputString[0].length()) {
                    break;
                }
            }

            // 같다는것은 문자가 다 포함한다는것
            if (index == inputString[0].length()) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
}

백준 10815번 (Silver 5)

import java.util.Arrays;
import java.util.Scanner;

public class problem354 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int size = in.nextInt();
        int[] sizeArr = new int[size];

        for (int i = 0; i < size; i++) {
            sizeArr[i] = in.nextInt();
        }
        // 이진 탐색을 위한 정렬
        // -10 2 3 6 10
        Arrays.sort(sizeArr);

        int m = in.nextInt(); // 비교할 카드 갯수
        int[] target = new int[m];
        for (int i = 0; i < m; i++) {
            target[i] = in.nextInt();
        }

        for (int i = 0; i < m; i++) {
            boolean isSearch = search(sizeArr, target[i]);

            if(isSearch){
                System.out.print("1" + " ");
            }else{
                System.out.print("0" + " ");
            }
        }
    }

    // 이진 탐색 메소드
    private static boolean search(int[] cards, int target) {
        int start = 0;
        int end = cards.length - 1;

        while (start <= end) {
            int mid = (start + end) / 2;

            // cards 배열에 target 번호가 있는경우
            if (cards[mid] == target) {
                return true;
            } else if (cards[mid] < target) {
                // 내림차순으로 정렬했음으로, 
               // 더 큰값이라는것은 오른쪽에 위치할수 있다는것임으로. + 1 해주었다.
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
        return false;
    }

}

프로그래머스 카카오

public class problem355 {
    class Solution {
        public String[] solution(int n, int[] arr1, int[] arr2) {
            String[] answer = new String[n];
            for(int i = 0; i < n; i++){
                // or 비트 연산자 
                answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
                answer[i] = answer[i].replaceAll("1", "#");
                answer[i] = answer[i].replaceAll("0", " ");

                // n은 6인데 5자리의 비트가 나오는경우가 있다.
                // 2번예제 11010(22) | 1110(14) 인경우 5자리로 나온다.
                // n 보다 비트가 적게 나오는경우 해당 칸 만큼 공백을 찍어줍니다.
                while(answer[i].length() < n){
                    answer[i] = " " + answer[i];
                }
            }

            return answer;
        }
    }
}

0개의 댓글