코딩테스트 대비 (String)

sua·2022년 9월 15일
post-thumbnail

1. 문자 찾기

문제


풀이

import java.util.Scanner;

public class Main {
    public int solution(String str, char t) {
        int answer = 0;
        str = str.toUpperCase();
        t = Character.toUpperCase(t);
        // System.out.println(str);
        /*
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == t) {
                answer++;
            }
        }
        */
        for(char x : str.toCharArray()) {
            if (x == t) {
                answer++;
            }
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        char c = kb.next().charAt(0);
        System.out.print(T.solution(str, c));
    }
}



2. 대소문자 변환

문제


### 개념 [아스키코드에서] 1. 대문자 : 65 ~ 90 2. 소문자 : 97 ~ 122 => 소문자에서 32를 빼면 대문자가 된다.

풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "";

        for(char x : str.toCharArray()) {
            /*
            if(Character.isLowerCase(x)) {
                answer += Character.toUpperCase(x);
            } else {
                answer += Character.toLowerCase(x);
            }
             */
            
            if(x >= 97 && x <= 122) { // 소문자라면
                answer += (x - 32); // 대문자로 변환
            } else { // 대문자라면
                answer += (x + 32); // 소문자로 변환
            }
        }
        
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.print(T.solution(str));
    }
}



3. 문장 속 단어

문제


풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "";
        int m = Integer.MIN_VALUE, pos;

        /*
        String[] s = str.split(" ");

        for(String x : s) {
            int len = x.length();

            if (len > m) {
                m = len;
                answer = x;
            }
        }
         */

        while((pos = str.indexOf(" ")) != -1) {
            String tmp = str.substring(0, pos);
            int len = tmp.length();

            if(len > m) { // >= 아닌 이유는 뒤에 위치한 경우는 제외하려고
                m = len;
                answer = tmp;
            }

            str = str.substring(pos + 1);
        }

        if(str.length() > m) {
            answer = str;
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.nextLine(); // 한 줄 입력 받기
        System.out.print(T.solution(str));
    }
}



4. 단어 뒤집기

문제


풀이

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public ArrayList<String> solution(int n, String[] str) {
        ArrayList<String> answer = new ArrayList<>();

        /*
        for(String x : str) {
            String tmp = new StringBuilder(x).reverse().toString();
            answer.add(tmp);
        }
         */

        for(String x : str) {
            char[] s = x.toCharArray();
            int lt = 0, rt = x.length() - 1;
            while(lt < rt) {
                char tmp = s[lt];
                s[lt] = s[rt];
                s[rt] = tmp;
                lt++;
                rt--;
            }
            String tmp = String.valueOf(s);
            answer.add(tmp);
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        String[] str = new String[n];
        for(int i = 0; i < n; i++) {
            str[i] = kb.next();
        }
        for(String x : T.solution(n, str)) {
            System.out.println(x);
        }
    }
}



5. 특정 문자 뒤집기

문제


풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer;
        char[] s = str.toCharArray();
        int lt = 0, rt = str.length() - 1;
        while(lt < rt) {
            if(!Character.isAlphabetic(s[lt])) {
                lt++;
            } else if(!Character.isAlphabetic(s[rt])) {
                rt--;
            } else {
                char tmp = s[lt];
                s[lt] = s[rt];
                s[rt] = tmp;
                lt++;
                rt--;
            }
        }
        answer = String.valueOf(s);

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}



6. 중복문자제거

문제


풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "";

        for(int i = 0; i < str.length(); i++) {
            if(str.indexOf(str.charAt(i)) == i) {
                answer += str.charAt(i);
            }
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}



7. 회문문자열

문제


### 개념 equalsIgnoreCase : 대소문자 구분없이 비교

풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "YES";
        /*
        str = str.toUpperCase();
        int len = str.length();

        for(int i = 0; i < len / 2; i++) {
            if(str.charAt(i) != str.charAt(len - i - 1)) {
                return "NO";
            }
        }
         */
        String tmp = new StringBuilder(str).reverse().toString();
        if(!str.equalsIgnoreCase(tmp)) {
            return "NO";
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}



8. 팰린드롬

문제


개념

replaceAll("[^A-Z]", "") : 대문자 A~Z가 아니면 ""로 변경해라


풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "NO";

        str = str.toUpperCase().replaceAll("[^A-Z]", "");

        String tmp = new StringBuilder(str).reverse().toString();

        if(str.equals(tmp)) {
            answer = "YES";
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.nextLine();
        System.out.println(T.solution(str));
    }
}



9. 숫자만 추출

문제


개념

'0' : 아스키 번호로 48
'9' : 아스키 번호로 57


풀이

import java.util.Scanner;

public class Main {
    /*
    public int solution(String str) {
        int answer = 0;

        for(char x : str.toCharArray()) {
            if(x >= 48 && x <= 57) {
                answer = answer * 10 + (x - 48);
            }
        }

        return answer;
    }
     */
    public int solution(String str) {
        String answer = "";

        for(char x : str.toCharArray()) {
            if(Character.isDigit(x)) {
                answer += x;
            }
        }

        return Integer.parseInt(answer);
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}



10. 문자거리

문제


풀이

import java.util.Scanner;

public class Main {
    public int[] solution(String str, char t) {
        int[] answer = new int[str.length()];
        int p = 1000;

        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == t) {
                p = 0;
                answer[i] = p;
            } else {
                p++;
                answer[i] = p;
            }
        }

        p = 1000;
        for(int i = str.length() - 1; i >= 0; i--) {
            if(str.charAt(i) == t) {
                p = 0;
            } else {
                p++;
                answer[i] = Math.min(answer[i], p);
            }
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        char c = kb.next().charAt(0);
        for(int x : T.solution(str, c)) {
            System.out.print(x + " ");
        }
    }
}



11. 문자열 압축

문제


풀이

import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "";
        str = str + " ";
        int cnt = 1;

        for(int i = 0; i < str.length() - 1; i++) {
            if(str.charAt(i) == str.charAt(i + 1)) {
                cnt++;
            } else {
                answer += str.charAt(i);
                if(cnt > 1) {
                    answer += String.valueOf(cnt);
                }
                cnt = 1;
            }
        }


        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}



12. 암호

문제



풀이

import java.util.Scanner;

public class Main {
    public String solution(int n, String str) {
        String answer = "";

        for(int i = 0; i < n; i++) {
            String tmp = str.substring(0, 7).replace('#', '1').replace('*', '0');
            int num = Integer.parseInt(tmp, 2); // 2진수를 10진수로 변경
            answer += (char) num;
            str = str.substring(7);
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        String str = kb.next();
        System.out.println(T.solution(n, str));
    }
}
profile
가보자고

0개의 댓글