📌Zero-base

코딩테스트 힌트 문제 풀기 2 (프로그래머스, 백준) 자바

구 일 2024. 4. 29. 22:44
728x90
반응형

한 번만 등장한 문자

프로그래머스 한 번만 등장한 문자 자바

 

 

import java.util.Hashtable;
import java.util.LinkedList;
import java.util.Map;

public class Main1 {
    public static void main(String[] args) {
        System.out.println(solution("abcabcadc"));
        System.out.println(solution("abdc"));
        System.out.println(solution("hello"));
    }

    /**
     * 솔루션
     * @param s 문자열
     * @return 문자열
     */
    public static String solution(String s) {
        StringBuffer sb = new StringBuffer();
        LinkedList<Character> list = new LinkedList<>();
        Hashtable<Character, Integer> ht = new Hashtable<>();

        // 해시테이블에 c로된 key가 없다면 key : c, value = 1 데이터 삽입
        // c로된 key가 있다면 key c의 value를 + 1
        for (char c : s.toCharArray()) {
            if (!ht.containsKey(c)) {
                ht.put(c, 1);
            } else {
                ht.replace(c, ht.get(c) + 1);
            }
        }

        // 해시테이블의 key value를 순회하면서 value가 1인 (즉, 중복되지 않은 글자) 값을 list에 추가
        for (Map.Entry<Character, Integer> e : ht.entrySet()) {
            if (e.getValue() == 1) {
                list.add(e.getKey());
            }
        }
        
        list.sort(Character::compareTo); // 리스트 정렬
        for (Character c : list) {
            sb.append(c); // 스트링버퍼에 글자 추가
        }

        return sb.toString();
    }
}

 

 

배열 회전시키기

프로그래머스 배열 회전시키기 자바

 

 

public class Main2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        int[] result = {};
        result = solution(arr, "right");
        for (int num : result) {
            System.out.print(num + " ");
        }
        System.out.println();

        int[] arr1 = {4, 455, 6, 4, -1, 45, 6};
        result = solution(arr1, "left");
        for (int num : result) {
            System.out.print(num + " ");
        }
    }

    /**
     * 솔루션
     * @param numbers 숫자배열
     * @param direction 방향
     * @return 숫자배열
     */
    public static int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
        
        if (direction.equals("right")) { // 오른쪽으로 한 칸 회전
            for (int i = 1; i < numbers.length; i++) {
                answer[i] = numbers[i - 1];
                if (i == numbers.length - 1) {
                    answer[0] = numbers[numbers.length - 1];
                }
            }
        } else { // 오른쪽으로 한 칸 회전
            for (int i = 1; i < numbers.length; i++) {
                answer[i - 1] = numbers[i];
                if (i == numbers.length - 1) {
                    answer[numbers.length - 1] = numbers[0];
                }
            }
        }

        return answer;
    }
}

 

 

5613번 계산기 프로그램

백준 5613번 계산기 프로그램 자바

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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

        int result = Integer.parseInt(br.readLine());

        while (true) {
            String s = br.readLine();

            if (s.equals("=")) {
                break;
            }

            int num = Integer.parseInt(br.readLine());

            if (s.equals("+")) {
                result += num;
            } else if (s.equals("-")) {
                result -= num;
            } else if (s.equals("*")) {
                result *= num;
            } else {
                result /= num;
            }
        }

        System.out.println(result);

        br.close();
    }
}

 

 

문자열안에 문자열

프로그래머스 문자열안에 문자열 자바

 

 

public class Main4 {
    public static void main(String[] args) {
        System.out.println(solution("ab6CDE443fgh22iJKlmn1o", "6CD"));
        System.out.println(solution("ppprrrogrammers", "pppp"));
        System.out.println(solution("AbcAbcA", "AAA"));
    }

    /**
     * 솔루션
     * @param str1 문자열
     * @param str2 문자열
     * @return 포함 여부
     */
    public static int solution(String str1, String str2) {
        return str1.contains(str2) ? 1 : 2;
    }
}

 

 

11725번 트리의 부모 찾기

백준 트리의 부모 찾기 자바

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main5 {

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

        int N = Integer.parseInt(br.readLine()); // 노드의 개수
        boolean[] visited = new boolean[N + 1]; // 방문 여부
        int[] parents = new int[N + 1]; // 부모 노드
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();

        for (int i = 0; i <= N; i++) {
            list.add(new ArrayList<>());
        }

        for (int i = 0; i < N - 1; i++) {
            String[] s = br.readLine().split(" ");
            int a = Integer.parseInt(s[0]);
            int b = Integer.parseInt(s[1]);
            list.get(a).add(b);
            list.get(b).add(a);
        }

        dfs(visited, list, parents, 1);

        for (int i = 2; i <= N; i++) {
            System.out.println(parents[i]);
        }

        br.close();
    }

    /**
     * dfs
     * @param visited 방문여부 배열
     * @param list 리스트
     * @param parents 부모노드 배열
     * @param i 노드
     */
    public static void dfs(boolean[] visited, ArrayList<ArrayList<Integer>> list, int[] parents, int i) {
        visited[i] = true;

        for (int num : list.get(i)) {
            if (!visited[num]) {
                parents[num] = i;
                dfs(visited, list, parents, num);
            }
        }
    }
}
728x90
반응형