2. 대소문자 변환
<hide/>
import java.util.Scanner;
public class Change {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
System.out.println(solution(str));
}
public static String solution(String str) {
String answer = "";
for( char x : str.toCharArray()) {
if ( Character.isLowerCase(x) ) {
answer += Character.toUpperCase(x);
}else {
answer += Character.toLowerCase(x);
}
}
return answer;
}
}
3. 문장 속 단어
<hide/>
import java.util.Scanner;
public class WordInSentence {
public static void main(String[] args) {
WordInSentence T = new WordInSentence ();
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
System.out.println(T.solution(str));
}
public String solution(String str) {
String answer = "";
int m = Integer.MIN_VALUE;
String [] s = str.split(" ");
for(String x : s) {
int len = x.length();
if(len > m){
m = len;
answer = x;
}
}
return answer;
}
}
Note) 실행결과
- 한 줄로 입력받기위해 "nextLine"
- int m = Integer.MAX_VALUE;
- String [] s= str.split(" "); String str에 대해 공백을 기준으로 여러가지 문자열로 이루어진 배열 s를 새로 만든다.
- str.indexOf(' ') != -1 ..... 공백을 발견하지 못하면 -1이 리턴.
- substr을 이용할 때는 반복문에서 앞 부터 탐색하므로 if (len > m) 에서 등호가 아닌 부등호를 사용해야한다.
-> 최대 길이 단어가 2개 이상일 때, 가장 앞에있는 단어를 리턴해야하기 때문이다.
4. 단어 뒤집기
<hide/>
import java.util.*;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in=new Scanner(System.in);
int n = in.nextInt();
String [] str = new String[n]; // 크기가 n인 배열 str을 만든다.
for(int i= 0 ; i < n; ++i){
str[i] = in.next();
}
for(String x : T.solution(n, str)){
System.out.println(x);
}
return ;
}
public ArrayList<String> solution(int n, String [] str){
ArrayList<String> answer = new ArrayList<>();
for(String x : str){
String tmp = new StringBuilder(x).reverse().toString();
// x라는 단어마다 StringBuilder 객체로 만든다.
// StringBuilder가 지원하는 메서드인 reverse(), toString()를 이용한다.
answer.add(tmp);
// arrayList에 추가할 때, add() 이용한다.
}
return answer;
}
}
5. 특정 문자 뒤집기
<hide/>
import java.util.*;
class Main {
public String solution(String str){
String answer;
char[] s=str.toCharArray();
int lt=0, rt=str.length()-1;
while(lt<rt){
if(!Character.isAlphabetic(s[lt])) lt++;
else if(!Character.isAlphabetic(s[rt])) rt--;
// s[lt], s[rt] 둘다 특수문자일 때는 넘어간다.
else{
char tmp=s[lt];
s[lt]=s[rt];
s[rt]=tmp;
lt++;
rt--;
}
}
answer=String.valueOf(s);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
System.out.println(T.solution(str));
}
}
Note)
- Character클래스의 isAlphabetic() 메서드를 이용한다.
- String.valueOf(s) : Char 배열 s를 String으로 바꾼다.
6. 중복문자제거
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in=new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
return ;
}
public String solution(String str){
String answer = "";
for(int i = 0; i < str.length(); ++i){
if(str.indexOf(str.charAt(i)) == i) answer += str.charAt(i);
}
return answer;
}
}
Note)
- str.indexOf()는 문자가 발견된 가장 첫번째의 인덱스를 리턴한다.
- str. indexOf( str.charAt(i) ) == i : str.indexOf() 의 값과 index가 같을 때만 출력?
7. 회문 문자열
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in=new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
return ;
}
public String solution(String str){
str = str.toLowerCase();
for(int i = 0; i < str.length() / 2 ; ++i ){
char [] c = str.toCharArray();
if( c[i] != c[str.length() - i - 1]) return "NO";
}
return "YES";
}
}
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in=new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
return ;
}
public String solution(String str){
String answer = "NO";
String tmp = new StringBuilder(str).reverse().toString();
if(str.equalsIgnoreCase(tmp)) answer = "YES";
return answer;
}
}
Note)
- char배열로 안 바꾸고 str.charAt(i) != str.charAt(len -i - 1) 라고 표현할 수도 있다.
- StrinBuilder을 이용할 수도 있다.
-> String tmp = new StringBuilder(str).reverse().toStrign()
-> str.equalsIgnoreCase(tmp) : str과 tmp에 대해서 대소문자 구분없이 비교한다.
8. 유효한 팰린드룸
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
Main T = new Main();
String str = in.nextLine();
System.out.println(T.solution(str));
return ;
}
public String solution(String str){
String answer = "NO";
str = str.toUpperCase().replaceAll("[^A-Z]" , "");
String tmp = new StringBuilder(str).reverse().toString();
if(tmp.equals(str)) answer = "YES";
return answer;
}
}
Note)
- 줄 단위로 입력받기 위해 nextLine()
- 정규식을 이용한다.
-> str = str.toUpperCase().replaceAll( "[^A-Z]", "" ) => 영어대문자가 아닌 문자는 모두 없앤다.
9. 숫자만 추출 (ASCII 또는 String)
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in=new Scanner(System.in);
String s = in.next();
System.out.println(T.solution(s));
return ;
}
public int solution(String s){
int answer = 0;
for(char x : s.toCharArray()){
if(48 <= x && x <= 57){
answer = answer * 10 + (x - 48);
}
}
return answer;
}
}
Note)
- 아스키 코드 48~ 57 사이에 있으면 숫자
- answer = answer * 10 + (X - 48)
- String으로 풀려면 Character클래스의 isDigit() 를 이용한다.
- String answer = ""; 에 넣은 다음
-> return Integer.parseInt(answer) 라고 해주면 숫자로 바뀐다.
???????????????????????????????
10. 문자거리
<hide/>
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
Main T = new Main();
String str = in.next();
char target = in.next().charAt(0);
for(int x : T.solution(str, target)){
System.out.print(x + " ");
}
return ;
}
public int[] solution(String str, char target){
int [] answer = new int[str.length()];
int p = 1000;
for(int i = 0; i < str.length() ; ++i){
if(str.charAt(i) == target ){
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) == target ) p = 0;
else{
p++;
answer[i] = Math.min(answer[i], p);
}
}
return answer;
}
}
11. 문자열 압축
<hide/>
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Main T = new Main();
Scanner in = new Scanner(System.in);
String s = in.next();
System.out.println(T.solution(s));
return ;
}
public String solution(String s){
String answer = "";
s += " "; // 공백 추가
int cnt = 1;
for(int i = 0; i < s.length() - 1; ++i){
if(s.charAt(i) == s.charAt(i+ 1)) ++cnt;
else{
answer += s.charAt(i);
if(cnt > 1) answer += String.valueOf(cnt); // toString이용해도 된다.
cnt = 1;
}
}
return answer;
}
}
12. 암호 (replace(), parseInt )
<hide/>
package first;
import java.util.*;
public class Replace {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Replace T = new Replace();
int n = scan.nextInt();
String str = scan.next();
System.out.printf( T.solution(n, str));
}
public String solution(int n, String s) {
String answer = "";
for(int i = 0; i < n; ++i) {
String tmp = s.substring(0, 7).replace("#", "1").replace("*", "0");
int num = Integer.parseInt(tmp, 2); //정수로 변환
answer += (char) num; // char형으로 바꿔서 넣어준다.
s = s.substring(7); // 7번 인덱스 앞 부분은 자른다.
}
return answer;
}
}
Note)
- #은 1로 *은 0으로 바꾼다.
- s.substring(7) : String의 7번인덱스부터 끝까지
- s.substring(0, 7).replace("#", "1").replace("*", "0").
-> replace메서드를 겹쳐 쓸 수 있다.
- int num = Integer.parseInt(tmp, 2) 을 통해 이진수 형태로 변환한다.
- num을 char형으로 바꿔서 answer에 하나씩 넣어준다.
'자료구조와 알고리듬 With Java > [인프런] Algorithm' 카테고리의 다른 글
Chapter 06. Sorting and Searching (정렬, 이분검색과 결정알고리즘) (0) | 2022.04.14 |
---|---|
Chapter 05. Stack, Queue (자료구조) (0) | 2022.04.13 |
Chapter 04. HashMap, TreeSet (해쉬, 정렬지원 Set) (0) | 2022.04.12 |
Chapter 03. Two pointers, Sliding window (0) | 2022.04.12 |
Chapter 02. Array (1, 2차원 배열) (0) | 2022.04.11 |