매일 Algorithm

신재원·2023년 2월 19일
0

Algorithm

목록 보기
42/243

백준 1181번 (정렬)

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

public class problem100 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);



        int size = in.nextInt();


        String [] arr = new String[size];

        /**
         * 개행 버림 (Scanner로 입력받을시 
         * nextInt()로 정수를 받은뒤 nextLine()을 쓰면 개행에 저장됨,
         * (개행을 한번 버려야 정상적으로 작동)
         */
        in.nextLine();

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

        Arrays.sort(arr,new Comparator<String>() {
            public int compare(String s1, String s2) {

                // 정수형으로 비교, compare은기본적으로 정수형으로 비교해줘야된다.
                // 사전순으로 출력 (아스키 값)
                if(s1.length() == s2.length()) {
                    return s1.compareTo(s2);
                }
                else {
                    // 단어 길이순으로 정렬
                    return Integer.compare(s1.length(), s2.length());
                }
            }
        });


        // 길이 비교가 끝난 배열 첫번째를 출력
        System.out.println(arr[0]);

        // 앞에있는 배열의 값이랑 비교 (중복 되지 않는 단어만 출력)
        for(int i = 1; i < size; i++) {
            if(!(arr[i].equals(arr[i-1]))) {
                System.out.println(arr[i]);
            }
        }


    }
}

프로그래머스 12977번 (LEVEL 2)

public class Solution {
    public int solution(int n) {
        int ans = 0;

        // 최대한 순간이동 사용
        // 5000 2500 1250 625 (2의 제곱으로 나눠짐)

        while(n !=0){

            if(n % 2 == 0){
                n /=2;
            }else{
                n--;
                ans++;
            }
        }
        return ans;
    }
}

프로그래머스 (LEVEL 1)

import java.util.*;
class Solution {
    
    // 소수 체크
    public boolean check(int num){
        // num = 7, num = 9 (3에서 걸러진다.)
        for(int i = 2; i < num; i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    
    public int solution(int[] nums) {
        int answer = 0;
        
        // 1 2 3 4
        // length 3
        // 소수 7 (반례 9)
        
        for(int i = 0 ; i < nums.length; i++){
            int sum = 0;
            for(int j = i+1; j < nums.length; j++){
                for(int k = j+1; k < nums.length; k++){
                sum = nums[i] + nums[j] + nums[k];
                if(check(sum)){
                   answer++;
                    }
                }
            }
        }
        return answer;
    }
}

프로그래머스 (LEVEL 2)

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        // skill_trees의 배열에서 string 배열을 하나씩 꺼낸다.

        for(String skill_tree : skill_trees){
            String temp = skill_tree;

            for(int i = 0 ; i < skill_tree.length(); i++){
                // C B A D F 방식처럼 substring
                String a = skill_tree.substring(i,i+1);
                if(!(skill.contains(a))){
                    // 필수 스킬이 아닐시 공백처리
                    temp = temp.replace(a, "");
                }
            }

            // 처음에는 이해가 가지않는 부분이였다.
            // index의 번호를 반환해준다. 
            // (입력된 skill이랑 temp랑 같은 문자임으로 0을 반환)
            if(skill.indexOf(temp) == 0) answer++;
        }
        return answer;
    }
}

0개의 댓글