티스토리 뷰
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
(만약 “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));
}
}
한 개의 문자열 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+ " ");
}*/
}
}
(단 반복횟수가 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));
}
}
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
만약 현수가 “#*****#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.
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));
}
}
'코테공부' 카테고리의 다른 글
[코테공부] Stack, Queue (1) (0) | 2023.07.10 |
---|---|
[코테공부] HashMap, HashSet, TreeSet (0) | 2023.06.20 |
[코테공부] Stirng 문자열 문제 2 (0) | 2023.01.07 |
[코테공부] String 문자열 문제 (0) | 2023.01.04 |
- Total
- Today
- Yesterday