728x90
String(문자열) 섹션 - (2)
1-5. 특정 문자 뒤집기 | Character.isAlphabetic() 사용해보기
import java.util.Scanner;
/* 1-5. 특정 문자 뒤집기
* 영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
* */
// 알파벳과 특수문자를 구분할 수 있어야 하고
// lt와 rt 가 양끝단에서 ++ 출발하고, 둘다 알파벳일 경우에만 교환이 이루어져야 함
// lt<rt 가 엇갈리면 끝나도록 하면 됨
public class Main1 {
//솔루션 함수
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--;
else { //이때 즉, 둘다 알파벳인 경우 swap
char tmp = s[lt];
s[lt]= s[rt];
s[rt] = tmp;
lt++;
rt--;
}
}
//반환할 String 에 재세팅
answer = String.valueOf(s); //char[]을 String화 시켜줌
return answer;
}
//실행 메인
public static void main(String[] args) {
// TODO Auto-generated method stub
Main1 T = new Main1();
Scanner kb = new Scanner(System.in);
// 1) 입력 : 섞인 문자열 입력 받아
String str = kb.next();
// 2) 출력 : 알파벳만 뒤집힌 문자열 반환하여 출력함
System.out.println(T.solution(str));
}
}
1-6. 중복 문자 제거 | indexOf() 는 처음 발견한 문자의 위치만 반환한다.
import java.util.Scanner;
/* 1-6. 중복 문자 제거
* 소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.
중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.
중복 여부 검사 어떻게 할거냐 ?
// 현재의 위치값 i == 해당 문자 첫 발견한 위치 indexOf(문자) 같으면 중복 X
// 현재 위치와 첫 발견위치가 다르면 ==> 무시하고 같을 때만 쌓아서 반환하면 된다.
//indexOf()는 처음으로 발견된 문자의 위치를 보여줌
* */
public class Main2 {
//솔루션 함수
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;
}
//실행 메인
public static void main(String[] args) {
// TODO Auto-generated method stub
Main2 T = new Main2();
Scanner kb = new Scanner(System.in);
// 1) 입력
String str = kb.next();
// 2) 출력
System.out.println(T.solution(str));
}
}
1-7. 회문 문자열 | (1) index위치로 비교 (2) reverse한 것과 비교
/* 1-7. 회문 문자열
* 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
// 단 대소문자 구분 X
* 1) 대소문자 구분안하니까 일단 전부 통일시켜주기 (대문자로)
* 2) _ _ _ _ _ (i < len/2) 인 동안 반복
* 3) 대칭하는 애들끼리 비교하면 됨
* */
public class Main3 {
//솔루션 함수 (1)
public String solution(String str) {
String answer = "YES";
//대소문자 구분X => 통일시켜주기
str = str.toUpperCase();
int len = str.length();
for(int i = 0; i <len/2; i++) {
// 0 1 2 3 이면 0과 3, 1과 2가 비교되어야 함
if(str.charAt(i) != str.charAt(len-i-1)) return "NO";
}
return answer;
}
//솔루션 함수 (2)
public String solution2(String str) {
String answer = "NO";
//reverse 해준 애가 처음이랑 같아도 회문 문자열
String tmp = new StringBuilder(str).reverse().toString(); //뒤집고
if(str.equalsIgnoreCase(tmp)) answer = "YES";
return answer;
}
//메인 함수
public static void main(String[] args) {
// TODO Auto-generated method stub
Main3 T = new Main3();
Scanner kb = new Scanner(System.in);
//1) 입력 :
String str = kb.next();
//2) 출력 1
System.out.println(T.solution(str));
//3) 출력 2
System.out.println(T.solution2(str));
}
}
1-8. 팰린드롬 | replaceAll () 이용
/* 1-8. 유효한 팰린드롭
* 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
*/
public class Main4 {
//솔루션 함수
public String solution(String str) {
String answer = "NO";
// 1) 대소문자 통일 + 알파벳 제외 글자는 모두 "" 공백으로 대체해라
// 알파벳만 검사해야 하므로
str = str.toUpperCase().replaceAll("[^A-Z]", "");
// 2) reverse 시키기
String tmp = new StringBuilder(str).reverse().toString();
//3) 처음 vs reverse 시킨 것 비교할 것
if(str.equals(tmp)) answer = "YES";
return answer;
}
//메인 함수
public static void main(String[] args) {
// TODO Auto-generated method stub
Main4 T = new Main4();
Scanner kb = new Scanner(System.in);
//1) 입력
String str = kb.nextLine();
//2) 출력
System.out.println(T.solution(str));
}
}
728x90
'알고리즘 이론 [개념] > [개념] 코테 알고리즘 공부 - 시즌 1' 카테고리의 다른 글
배열(Array) 섹션 - (3) (0) | 2023.03.01 |
---|---|
배열(Array) 섹션 - (2) (0) | 2023.02.28 |
배열(Array) 섹션 - (1) (0) | 2023.02.27 |
String(문자열) 섹션 - (3) (0) | 2023.02.23 |
String(문자열) 섹션 - (1) (0) | 2023.02.21 |