피카츄

이윤설·2024년 3월 27일

제출코드(오답)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        String s = input.replaceAll("pi|ka|chu", "");

        
        if (input.contains("pi") || input.contains("ka") || input.contains("chu") || input.) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
        
    }
}

당연히 오답이다. 만약 입력값이 pihello면 YES를 출력한다.
해결책이 떠오르지 않았다.

모범답안

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        String s = input.replaceAll("pi|ka|chu", "");

        if (s.equals("")) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}

배운점

  • 입력값이 모두 "pi", "ka", "chu"의 요소로 이루어져있는지 알아내기 위해선 replaceAll()을 사용하면 된다. s 문자열 내에서 "pi", "ka", "chu"에 해당하는 모든 부분을 찾아서 빈 문자열("")로 대체한다.
  • 주의) ||가 아니라 |다. 그리고 &&도 사용될 수 없다. 오로지 |만 가능하다.

자주 사용되는 replaceAll() 사용 예시

// 1. 특정 문자 제거
String cleaned = "Hello, World!".replaceAll("[,!]", ""); 
// "Hello World"

// 2. 공백 제거
String trimmed = "   Hello   World   ".replaceAll("\\s+", " ").trim(); 
// "Hello World"

// 3. 숫자만 추출
String numbers = "Hello123World456".replaceAll("[^0-9]", ""); 
// "123456"

// 4. 대문자만 추출
String uppercase = "Hello123World".replaceAll("[^A-Z]", ""); 
// "HW"

// 5. 특정 패턴 바꾸기 (예: 케이스 변환)
String swapped = "Hello World".replaceAll("(\\w)(\\w*)", "$1$2_"); 
// "H_e_l_l_o_ W_o_r_l_d_"

// 6. 여러 패턴을 한 번에 바꾸기
String replaced = "abc123def456ghi".replaceAll("(\\d+)|(\\w)", "$1:$2:"); 
// "abc:123:def:456:ghi:"

// 7. 구분자로 분리하여 배열로 변환
String[] split = "apple,banana,cherry".split(","); 
// ["apple", "banana", "cherry"]
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글