티스토리 뷰

9. 숫자만 추출

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.

(만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.

추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.)

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

public class Main {

    //아스키번호 48 ~ 57
    public static int solution(String str){
        /*int answer= 0;
        for(char x : str.toCharArray()){
            if(x>=48 && x<=57){
                //x = 아스키코드로 계산
                System.out.println(answer +"="+answer +"*"+"10"+"+("+x+"-"+"48)");
                answer = answer*10+(x-48);
            }
        }*/

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

        return Integer.parseInt(answer);
    }

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


 

 

10. 가장 짧은 문자거리

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.

(첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.

문자열의 길이는 100을 넘지 않는다.)

import java.security.spec.RSAOtherPrimeInfo;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    //아스키번호 48 ~ 57
    public static int[] solution(String str, char chk) {
        /*int answer= 0;
        for(char x : str.toCharArray()){
            if(x>=48 && x<=57){
                //x = 아스키코드로 계산
                System.out.println(answer +"="+answer +"*"+"10"+"+("+x+"-"+"48)");
                answer = answer*10+(x-48);
            }
        }*/

        int[] answer = new int[str.length()];
        int p = 1000;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == chk) {
                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) == chk) {
                p = 0;
                if (p < answer[i]) answer[i] = p;
            }else {
                p++;
                answer[i] = Math.min(answer[i], p);
            }
        }

        return answer;
    }


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

    }
}


 

 

 

11. 문자열 압축
 
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.

(단 반복횟수가 1인 경우 생략합니다.)

import java.security.spec.RSAOtherPrimeInfo;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    //아스키번호 48 ~ 57
    public static String solution(String str) {
        String answer = "";
        str = str + " ";
        char[] ary = new char[str.length()];
        ary = str.toCharArray();
        int a=1;

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


       }
        return answer;
    }


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

    }
}


 

 

 

12. 암호
현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다. 비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.

비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.

만약 현수가 “#*****#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.

1. “#*****#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.

2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.

3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.

참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.

현수가 4개의 문자를 다음과 같이 신호로 보냈다면

#****###**#####**#####**##**

이 신호를 4개의 문자신호로 구분하면

#****## --> 'C'

#**#### --> 'O'

#**#### --> 'O'

#**##** --> 'L'

최종적으로 “COOL"로 해석됩니다.

현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.

 

첫 줄에는 보낸 문자의 개수(10을 넘지 안습니다)가 입력된다. 다음 줄에는 문자의 개수의 일곱 배 만큼의 #또는 * 신호가 입력됩니다.

현수는 항상 대문자로 해석할 수 있는 신호를 보낸다고 가정합니다.

import java.util.Scanner;

public class Main {

    public static String solution(int cnt, String str) {
        String answer = "";
        for(int i=0;i<cnt;i++){
            String temp = str.substring(0,7).replace('#','1').replace('*','0');

            ///10진수화
            int num =Integer.parseInt(temp, 2);
//#****###**#####**#####**##**
            answer +=(char) num;
         //   System.out.println(temp + " " + num);
            str = str.substring(7);
        }

        return answer;
    }


    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int cnt = sc.nextInt();
        String str = sc.next();

        System.out.println(solution(cnt, str));

    }
}


 

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday