Java構文とアルゴリズム(string 2)
42490 ワード
JAVA文法
通常は正規表現とともに使用されます
ex) str="*AFC$FG"
str=str.replaceAll("^A-Z",")/A-Z,そうでない場合は空
//出力AFCFG
ex) str="1 2 3 4 "
str=str.trimp();//"1 2 3 4"
String str1 = "By default ";
String result1 = str1.replaceAll("", "");//Bydefault
質問です。
学識
All()を
コード#コード#
package inflearn.section1_string;
// 유효한 팰린드롬- 앞에서 읽을때나 뒤에서 읽을떄나 같은 문자열
// 입력 -> found7, time: study; Yduts; emit, 7Dnuof -> 알파벳만 비교
import java.util.*;
public class Main8 {
public String solution(String str) {
String answer="YES";
// 1. 대문자로 변경
str=str.toUpperCase();
// 2. 특수문자 정규 표현식을 이용해서 제거
str=str.replaceAll("[^A-Z]","");
// System.out.println("str:"+str);
// 3. stringBuilder의 reverse를 이용해서 문자 확인
StringBuilder sb=new StringBuilder(str).reverse();
String reverse_sb=sb.toString();
if (!str.equals(reverse_sb)) {
answer="NO";
}
return answer;
}
public static void main(String[] args) {
Main8 main =new Main8();
Scanner scan=new Scanner(System.in);
System.out.println(main.solution(scan.nextLine()));
}
}
質問です。
学識
解決策
ストレージ//eのすべての場所
見つかった値
重要なのは
左から移動
検索する値がtargetに等しい場合は、pを0に初期化します.
異なる場合、pは1
p=1000
検索する値がtargetに等しい場合は、pを0に初期化します.
異なる場合、pを増加する、既存の左ナビゲーションの値と比較する(最小値を選択する)
コード#コード#
package inflearn.section1_string;
import java.util.*;
public class Main10 {
public void solution1(String str) {
String []temp=str.split(" ");
// temp[0] -> 문자열, temp[1] -> 문자
// int []dis=new int[temp[0].length()];
String answer="";
char []arr_temp=temp[0].toCharArray();
char e=temp[1].charAt(0);
// e의 위치 인덱스
ArrayList<Integer>arr=new ArrayList<>();
for (int i=0;i<arr_temp.length;i++) {
if (arr_temp[i]==e) {
arr.add(i);
}
}
for (int i=0;i<arr_temp.length;i++) {
int tmp=Integer.MAX_VALUE;
for (Integer j:arr) {
int k=Math.abs(i-j);
if (tmp>k) {
tmp=k;
}
}
// Int ->String
answer+=Integer.toString(tmp)+" ";
}
answer=answer.trim();
System.out.println(answer);
}
public void solution2(String str) {
String []temp=str.split(" ");
String answer="";
char []arr_temp=temp[0].toCharArray();
char e=temp[1].charAt(0);
int [] ans=new int[arr_temp.length];
// 왼쪽부터 탐색
int p=1000; // 처음 가장 끝에 있는 target 거리라고 생각
for (int i=0;i< arr_temp.length;i++) {
if (arr_temp[i]==e) {
// p를 0으로 초기화하고 arr_te
p=0;
}
else {
// p를 증가
p++;
}
ans[i]=p;
}
// 출력
System.out.println(Arrays.toString(ans)); //[1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]
// 오른쪽부터 탐색
p=1000;
for (int i= arr_temp.length-1;i>=0;i--) {
if (arr_temp[i]==e) {
p=0;
}
// 다르면 p를 증가시키고 기존값과 비교한다음에 그 중 작은 값을 ans에 넣는다.
else {
p++;
int val=Math.min(p,arr_temp[i]);
ans[i]=val;
}
}
System.out.println(Arrays.toString(ans));
}
public static void main(String[] args) {
Main10 main =new Main10();
Scanner scan=new Scanner(System.in);
// main.solution1(scan.nextLine());
main.solution2(scan.nextLine());
}
}
質問です。
解決策
コード#コード#
package inflearn.section1_string;
import java.util.*;
public class Main11 {
public String solution(String str) {
String answer="";
int lt=0;
int rt=str.length();
// 배열로 변환
char []temp=str.toCharArray();
while (lt<rt) {
int tmp=1;
char val=temp[lt];
for (int i=lt+1;i<rt;i++) {
if (val==temp[i]) {
tmp++;
}
else {
break;
}
}
// System.out.println("tmp:"+tmp);
// Integer -> string
String data=""+val;
if (tmp!=1) {
data+=Integer.toString(tmp);
}
answer+=data;
lt=lt+tmp;
}
return answer;
}
public static void main(String[] args) {
Main11 main =new Main11();
Scanner scan=new Scanner(System.in);
System.out.println(main.solution(scan.next()));
}
}
質問です。
解決策
各文字
コード#コード#
// 암호 문제
package inflearn.section1_string;
import java.util.*;
public class Main12 {
public String solution(int num, String str) {
// 1. '#', '*'를 1 or 0으로 변경
char []temp=str.toCharArray();
for (int i=0;i<temp.length;i++) {
if (temp[i]=='#') {
temp[i]='1';
}
else {
temp[i]='0';
}
}
// 출력
// System.out.println(Arrays.toString(temp));
String answer="";
// 2. 7개씩 문자 자르고 ss에 저장 ex) 1000011
for (int i=0;i<num;i++) {
String ss="";
for (int j=0;j<7;j++) {
ss+=temp[7*i+j];
}
// System.out.println("ss:"+ss);
//3. ss를 2진법으로 변경하고 answer에 (char)로 저장
// String -> 다시 배열로 변환
char ans[]=ss.toCharArray();
// String -> 2진수로 변환
int value=0;
int multi=6;
for (int k=0;k<=6;k++) {
int b=(int)Math.pow(2,multi);
// char -> Int로 변환
int val=Character.getNumericValue(ans[k]);
// 출력
value+=b*val;
multi--;
}
answer+=(char)value;
}
return answer;
}
public static void main(String[] args) {
Main12 main =new Main12();
Scanner scan=new Scanner(System.in);
int num=scan.nextInt();
String str=scan.next();
System.out.println(main.solution(num,str));
}
}
REF
https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84/dashboard
https://cote.inflearn.com/contest/10/problems
Reference
この問題について(Java構文とアルゴリズム(string 2)), 我々は、より多くの情報をここで見つけました https://velog.io/@sds1vrk/자바-문법-및-알고리즘-string-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol