String

문자찾기 (1-1)

  • 설명 : 한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요. 대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다.

  • 입력 : 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다. 문자열은 영어 알파벳으로만 구성되어 있습니다.

  • 작성답안
import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine().toLowerCase();
        char ch = scan.nextLine().toLowerCase().charAt(0);

        int idx = str1.indexOf(ch);
        int cnt = 0;
        while (idx>=0){
            idx = str1.indexOf(ch, idx+1);
            cnt++;
        }
        System.out.println(cnt);
  }
}
  • 특징
    1. 문자열.toLowerCase() : 전체 소문자로 변환
    2. 문자열..toUpperCase() : 전체 대문자로 변환
    3. indexOf 사용 익히기

대소문자 변환 (1-2)

  • 설명 : 대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.

  • 입력 : 첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다. 문자열은 영어 알파벳으로만 구성되어 있습니다.

  • 작성답안
import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();

        System.out.println(t.solution(str1));
    }

    public String solution(String str1h){

        String result = "";

        for (char ch: str1h.toCharArray()) {
            if (Character.isLowerCase(ch)){
                result += String.valueOf(ch).toUpperCase();
            } else {
                result += String.valueOf(ch).toLowerCase();
            }
        }

        return result;
    }
}
  • 특징
    1. 문자열.toCharArray() : 문자열 char 배열로 변환 익히기

문장 속 단어 (1-3)

  • 설명 : 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요. 문장속의 각 단어는 공백으로 구분됩니다.

  • 입력 : 첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.

  • 출력 : 첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다.

  • 작성답안

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();

        System.out.println(t.solution(str1));

    }

    public String solution(String str1h){

        String result = "";
        String[] param = str1h.split(" ");
        int len = 0;

        for (String str: param) {
            if(str.length() > len) {
                len= str.length();
                result = str;
            }
        }
        return result;
    }
}
  • 특징
    1. .split 활용 익히기

단어 뒤집기 (1-4)

  • 설명 : N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.

  • 입력 : 첫 줄에 자연수 N(3<=N<=20)이 주어집니다. 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.

  • 출력 : N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.

  • 작성답안

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        int roof = scan.nextInt();
        String[] word = new String[roof];

        for(int i=0; i<roof; i++){
            word[i] = scan.next();
        }

        String[] result = t.solution(word);

        for (String rst : result){
            System.out.println(rst);
        }

    }

    public String[] solution(String[] word){

        String result[] = new String[word.length];

        for (int i=0; i< word.length; i++){
            String param = "";
            for (int j=word[i].length()-1; j>=0; j--){
                param += word[i].charAt(j);
            }
            result[i] = param;
        }

        return result;
    }
}
  • 풀이답안
import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        int roof = scan.nextInt();
        String[] word = new String[roof];

        for(int i=0; i<roof; i++){
            word[i] = scan.next();
        }

        for (String rst : t.solution(word)){
            System.out.println(rst);
        }

    }

    public String[] solution(String[] word){

        String result[] = new String[word.length];

        for (int i=0; i< word.length; i++){
            String param = new StringBuilder(word[i]).reverse().toString();
            result[i] = param;
        }
        return result;
    }
}
  • 특징
    1. 각각의 배열의 원소를 수동으로 뒤집는 방법을 사용하여 풀이 했으나, StringBuilder 지원메소드 방법을 익혀두는것이 좋음
      • String param = new StringBuilder(문자열).reverse().toString();
      • StringBuilder를 통해 문자열을 reverse()하고, String 클래스 형식으로 받기위해 다시 toString();

특정 문자 뒤집기 (1-5)

  • 설명 : 영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

  • 입력 : 첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.

  • 출력 : 첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.

  • 작성답안

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        String str = scan.next();

        System.out.println(t.solution(str));
    }

    public String solution(String word){
        int lt = 0, rt = word.length()-1;
        char[] ch = word.toCharArray();
        char[] tmp = new char[word.length()];

        while (lt<rt){
            if(!((ch[lt]>=65 || ch[lt]>=65+32)&&(ch[lt]<=90 || ch[lt]<=90+32))){
                lt++;
            } else if (!(ch[rt]>=65 || ch[rt]>=65+32)&&(ch[rt]<=90 || ch[rt]<=90+32)){
                rt--;
            } else {
                tmp[lt] = ch[lt];
                ch[lt] = ch[rt];
                ch[rt] = tmp[lt];
                lt++;
                rt--;
            }
        }

        return String.valueOf(ch);
    }
}
  • 풀이답안
import java.util.Scanner;
  
public class Main {
  public static void main(String[] args) {
        Main t = new Main();
        Scanner scan = new Scanner(System.in);
        String str = scan.next();

        System.out.println(t.solution(str));
    }

    public String solution(String word){
        int lt = 0, rt = word.length()-1;
        char[] ch = word.toCharArray();
        char[] tmp = new char[word.length()];

        while (lt<rt){
            if(!Character.isAlphabetic(ch[lt])){
                lt++;
            } else if (!Character.isAlphabetic(ch[rt])){
                rt--;
            } else {
                tmp[lt] = ch[lt];
                ch[lt] = ch[rt];
                ch[rt] = tmp[lt];
                lt++;
                rt--;
            }
        }

        return String.valueOf(ch);
    }
}
  • 특징
    1. lt, rt를 사용하여 첫 시작점과, 끝 종료점을 정하고 조건에 일치할 시 한칸씩 당기는 방법으로 진행
    2. 양 끝점을 동시에 체크하는 만큼 lt<rt라는 조건을 지정해 절반지점까지만 실행하면 됨
    3. 아스키코드를 사용해 수동으로 알파벳 체크를 하였으나, Character에서 지원하는 isAlphabetic 메소드를 이용하면 훨씬 쉽게 체크 할 수 있음.

Updated: