String

1. 문자 찾기

풀이

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class Question1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input1 = in.nextLine();
        String input2 = in.nextLine();

        Integer answer = 0;

        input1 = input1.toLowerCase();
        input2 = input2.toLowerCase();

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

        System.out.println(answer);
        return;
    }
}

Error

  • 입력 문자열과 비교 문자열 모두 소문자로 변환해주어야 했다. 예시 입출력을 보고 입력 문자열만 소문자로 변환해주었다.

  • string의 길이 .lengtrh

  • string 인덱스 접근 charAt

Ref

2. 대소문자 변환

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 대소문자_변환 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String answer = "";

        for (int i = 0; i < str.length(); i++) {
            Character c = str.charAt(i);
            if (Character.isUpperCase(c)) answer = answer + Character.toLowerCase(c);
            if (Character.isLowerCase(c)) answer = answer + Character.toUpperCase(c);
        }
        System.out.println(answer);
        return;
    }
}

Ref

3. 문장 속 단어

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 문장_속_단어 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String words[] = str.split(" ");

        String answer = "";

        for (int i = 0; i < words.length; i++) {
            String word = words[i];
            if (word.length() > answer.length()) answer = word;
        }

        System.out.println(answer);
        return;
    }
}

4. 단어 뒤집기

package com.codingtest.Algorithm.Chapter1.String;

import java.lang.reflect.Array;
import java.util.Scanner;

public class 단어_뒤집기 {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String words[] = new String[num];

        // 기존 단어 배열
        for (int i = 0; i < num; i++) {
            String str = in.nextLine();
            words[i] = str;
        }

        // 역순 출력
        for (int i = 0; i < num; i++) {
            StringBuffer sb = new StringBuffer(words[i]);
            System.out.println(sb.reverse().toString());
        }
        return ;
    }
}

5. 특정 문자 뒤집기

package com.codingtest.Algorithm.Chapter1.String;

import java.util.Scanner;

public class 특정_문자_뒤집기 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        StringBuilder sb = new StringBuilder(str);

        String temp = "";


        for (int i = 0; i < sb.length(); i++) {
            Character c = str.charAt(i);
            if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
                temp += c;
            }
        }

        int lastIndex = temp.length() - 1;

        for (int i = 0; i < sb.length(); i++) {
            Character c = str.charAt(i);
            if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
                sb.replace(i, i + 1, "" + temp.charAt(lastIndex));
                lastIndex--;

            }
        }

        System.out.println(sb.toString());
    }

}

6. 중복 문자 제거

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 중복_문자_제거 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String answer = "";

        for (int i = 0; i < str.length(); i++) {
            if (!answer.contains("" + str.charAt(i))) answer += str.charAt(i);
        }
        System.out.println(answer);

        return;
    }
}

Ref

7. 회문 문자열

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 회문_문자열 {
    public static final String yes = "YES";
    public static final String no = "NO";

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String answer = yes;
        str = str.toLowerCase();

        for (int i = 0; i < str.length() / 2; i++) {
            if (str.charAt(i) != str.charAt(str.length() - 1 - i)) answer = no;
        }

        System.out.println(answer);
        return;
    }
}

Ref

8. 유효한 팰린드롬

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 유효한_팰린드롬 {

    public static final String yes = "YES";
    public static final String no = "NO";

    // TODO : 대소문자 구분 없ㅇㅇ음
    // TODO : 알파벳만 체크
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String answer = yes;
        String deletedChar = "";

        for (int i = 0; i < str.length(); i++) {
            Character c = str.charAt(i);
            if (c.toString().matches("^[a-zA-Z]*$")) deletedChar += c;
        }
        deletedChar = deletedChar.toLowerCase();

        for (int i = 0; i < deletedChar.length() / 2; i++) {
            if (deletedChar.charAt(i) != deletedChar.charAt(deletedChar.length() - 1 - i)) {
                answer = no;
            }
        }

        System.out.println(answer);
    }
}

9. 숫자만 추출

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 숫자만_추출 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String answer = "";

        for (int i = 0; i < str.length(); i++) {
            Character c = str.charAt(i);
            if (c >= '0' && c <= '9') answer += c;
        }
        if (answer.length() != 0 && answer.charAt(0) == '0')
            answer = answer.substring(1, answer.length());

        System.out.println(Integer.parseInt(answer));
    }
}

Ref

10. 가장 짧은 문자거리

package com.codingtest.Algorithm.Chapter1;

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

public class 가장_짧은_문자거리_2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        String target = in.next();
        String idxStr = "";
        String answer = "";

        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == target.charAt(0)) idxStr += i + " ";
        }

        String[] splitArray = idxStr.split(" ");
        int[] idxArr = Arrays.stream(splitArray)
                .mapToInt(Integer::parseInt)
                .toArray();

        for (int i = 0; i < str.length(); i++) {
            int min = Integer.MAX_VALUE;
            if (str.charAt(i) == target.charAt(0)) {
                min = 0;
                answer += min + " ";
                continue;
            }

            for (int j = 0; j < idxArr.length; j++) {
                int distance = Math.abs(i - idxArr[j]); //절댓값
                if (distance < min) min = distance;
            }
            answer += min + " ";
        }

        answer = answer.substring(0, answer.length() - 1);
        System.out.println(answer);
    }
}

Ref

11. 문자열 압축

package com.codingtest.Algorithm.Chapter1;

import java.util.HashMap;
import java.util.Scanner;

public class 문자열_압축 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        HashMap<Character, Integer> hm = new HashMap<>();
        String answer = "";

        for (int i = 0; i < str.length() - 1; i++) {
            Character c = str.charAt(i);

            if (hm.containsKey(c)) {
                hm.put(c, hm.get(c) + 1);
            }
            if (!hm.containsKey(c)) {
                hm.put(c, 1);
                answer += c;
            }
            if (c != str.charAt(i + 1)) {
                if (hm.get(c) == 1) {
                    hm.remove(c);
                } else {
                    answer += hm.get(c);
                    hm.remove(c);
                }
            }
        }

        if (hm.isEmpty()) {
            answer += str.charAt(str.length() - 1);
        } else {
            int tempCnt = hm.get(str.charAt(str.length() - 1)) + 1;
            answer += tempCnt;
        }

        System.out.println(answer);
    }
}

Ref

12. 암호

package com.codingtest.Algorithm.Chapter1;

import java.util.Scanner;

public class 암호 {
    
    private static int CODE_LENGTH = 7;
    
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int len = Integer.parseInt(in.nextLine());
        String message = in.nextLine();
        String messArr[] = new String[len];

        String answer = "";

        int idx = 0;
        for (int i = 0; i < len; i++) {
            messArr[i] = message.substring(idx, idx+7);
            idx += 7;
        }

        for (int i = 0; i < len; i++) {
            String code = messArr[i];
            String tempCode = "";
            for (int j = 0; j < CODE_LENGTH; j++) {
                if (code.charAt(j) == '*') {
                    tempCode += '0';
                }
                if (code.charAt(j) == '#') {
                    tempCode += '1';
                }
            }
            messArr[i] = tempCode;
        }

        for (int i = 0; i < len; i++) {
            int binaryToDecimal = Integer.parseInt(messArr[i], 2);
            answer += (char) binaryToDecimal;
        }
        System.out.println(answer);
    }
}

Last updated