1일1알고/Java Algorithm
23/01/31 [Inf_0108_유효한 팰린드롬]
kim chan jin
2023. 1. 31. 20:43
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
found7, time: study; Yduts; emit, 7Dnuof
예시 출력 1
YES
코드
기억할 것
정규식 어떤 식으로 구성하는지 연습하기
https://heannim-world.tistory.com/14
https://blog.hexabrain.net/205
https://zzang9ha.tistory.com/322
https://coding-factory.tistory.com/529
String 문자열.replaceAll(문자열 또는 정규식, 대체할 문자열)
StringBuilder 스트링빌더.reverse()
String 스트링빌더.reverse().toString()
package algorithm;
import java.util.Scanner;
public class Inf_0108_replaceAll {
// replaceAll로 특수문자 제거
public String solution(String str){
str = str.replaceAll("[^a-zA-Z]", "").toUpperCase();
// [] 요소 맨 앞에 ^ 넣어서 반대로 만들기, not영어소대문자는 특수문자를 의미
String tmp = new StringBuilder(str).reverse().toString();
if(str.equals(tmp)) return "YES";
return "NO";
}
public static void main(String[] args) {
Inf_0108_replaceAll m = new Inf_0108_replaceAll();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(m.solution(str));
}
}
정규표현식 연습
헷갈리는 개념
\w: 알파벳, 한글, 숫자, 언더바
\w를 표현하기 위해선 실제로는 \\w이렇게 써야함
정규 표현식 역슬래시(\)는 확장문자
역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
표현 | 문법 |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\z | 입력의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\s | 공백문자 |
\S | 공백문자를 제외한 문자 |
\w | 알파벳, 숫자, 한글, 언더바 문자 |
\W | 알파벳, 숫자, 한글, 언더바를 제외한 문자 |
\d | 숫자, 즉 [0-9]와 동일 |
\D | 숫자를 제외한 문자 |
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 앞 문자가 0번 이상 발생 |
+ | 앞 문자가 1번 이상 발생 |
? | 앞 문자가 0번 또는 1번 발생 |
[] | 문자의 집합 또는 범위를 나타냄 [0-9]: 0부터 9까지 범위 중 하나의 문자 [a-z]: a부터 z까지 범위 중 하나의 문자 [^0-9]: 0부터 9까지 범위를 제외한 하나의 문자 [^a-z]: a부터 z까지 범위를 제외한 하나의 문자 |
{} | 횟수 또는 범위를 의미 {3}: 문자 3번 등장 {2,3}: 문자 2번 또는 3번 등장 |
() | 소괄호 안의 문자를 하나의 문자로 인식 |
| | or 조건 |
?: | 콜론(:) 우측 문자 이외의 것은 제외함 |
정규 표현식 | 설명 |
^[0-9]*$ | 숫자 (0부터 9까지의 범위에서 0번 이상의 문자들) ^: 문자열 시작 []: 문자의 집합 또는 범위 0-9: 0부터 9까지 범위 중 하나의 문자 *: 문자가 0번 이상 발생 $: 문자열 끝 |
^[a-zA-Z]*$ | 영문자 (a부터 z까지, A부터 Z까지의 범위에서 0번 이상의 문자들) ^: 문자열 시작 []: 문자의 집합 또는 범위 a-zA-Z: a부터 z까지, A부터 Z까지 범위 중 하나의 문자 *: 문자가 0번 이상 발생 $: 문자열 끝 |
^[가-힣]*$ | 한글 (가부터 힣까지 범위에서 0번 이상의 문자들) ^: 문자열 시작 []: 문자의 집합 또는 범위 가-힣: 가부터 힣까지 범위 중 하나의 문자 *: 문자가 0번 이상 발생 $: 문자열 끝 |
\\w+@\\w+\\.\\w+(\\.\\w+)? | E-Mail (e.g. java@naver.com) \: 확장문자 시작 \w+: 알파벳, 숫자, 한글, 언더바가 1번 이상 발생 (e.g. java) @: @ (e.g. @) \: 확장문자 시작 \w+: 알파벳, 숫자, 한글, 언더바가 1번 이상 발생 (e.g. naver) \\.: . (문자열이 아니므로 \\.(확장문자+이스케이프 문자 사용)) (e.g. .) \: 확장문자 시작 \w+: 알파벳, 숫자, 한글, 언더바가 1번 이상 발생 (e.g. com) (): 소괄호 속 문자들을 하나의 문자로 취급 ?: 문자가 0번 또는 1번 발생 (\\.\\w+)?: 소괄호 속 문자들을 한 문자로 취급하되 그 문자가 최소 1번 발생 (이메일 형식을 강제하기 위함!) |
^\d{2,3}-\d{3,4}-\d{4}$ | 전화번호 (e.g. 02-910-1234, 010-1234-5678) ^: 문자열 시작 \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {2,3}: 문자의 갯수가 2개 또는 3개 등장(e.g. 02, 010) -: - (문자열이므로 그냥 -(하이픈) 사용) (e.g. -, -) \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {3,4}: 문자의 갯수가 2개 또는 3개 등장 (e.g. 910, 1234) \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {4}: 문자의 갯수가 4개 등장 (e.g. 1234, 5678) $: 문자열 끝 |
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ | 휴대전화번호 (e.g. 010-1234-5678, 018-999-8888) ^: 문자열 시작 01: 01 (): 소괄호 속 문자들을 하나의 문자로 취급 ?: 콜론(:) 우측 문자 이외의 것은 제외함 0|1|[6-9]: 0 또는 1 또는 6,7,8,9 중 하나의 문자 (e.g. 010, 018) -: - (문자열이므로 그냥 -(하이픈) 사용) (e.g. -, -) (): 소괄호 속 문자들을 하나의 문자로 취급 ?: 콜론(:) 우측 문자 이외의 것은 제외함 \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {3}: 문자가 3번 등장 |: 또는 \d:숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {3}: 문자가 4번 등장 (e.g. 1234, 999) -: - (문자열이므로 그냥 -(하이픈) 사용) (e.g. -, -) \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {4}: 문자가 4번 등장 (e.g. 5678, 8765) $: 문자열 끝 |
\d{6} \- [1-4]\d{6} | 주민등록번호 (e.g. 971111-1234567) \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {6}: 문자가 6번 등장 (e.g. 971111) \-: - (문자열이 아니므로 \-(이스케이프 문자) 사용) (e.g. -) [1-4]: 1부터 4까지의 범위 중 하나의 문자 \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {6}: 문자가 6번 등장 (e.g. 1234567) |
^\d{3}-\d{2}$ | 우편번호 (e.g. 123-45) ^: 문자열 시작 \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {3}: 문자가 3번 등장 (e.g. 123) -: - (문자열이므로 그냥 -(하이픈) 사용) (e.g. -) \d: 숫자, 즉 [0-9]와 동일, 0부터 9까지의 범위 중 하나의 문자 {2}: 문자가 2번 등장 (e.g. 45) $: 문자열 끝 |