본문 바로가기
PS/BOJ

[자바] 백준 23027 - 1번부터 문제의 상태가…? (java)

by Nahwasa 2022. 12. 5.

 문제 : boj23027


 

필요 알고리즘 개념

  • 구현, 문자열
    • 문제에 제시된대로 구현해주면 된다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  자바에서 어떠한 문자가 포함되어있는지 확인은 String s에 대해 s.contains("A") 와 같은 식으로 가능하다. 그리고 특정 문자를 모두 특정 문자로 변경하는 것은 s = s.replaceAll("B", "A"); ( 모든 B를 A로 변경 ) 과 같이 가능하다.

 

  위의 사항들을 안다면(물론 charAt()으로 각 Character를 확인해서 풀어도 되고 방법은 많다.) 문제에서 제시된 1~4를 모두 코드로 구현해주기만 하면 된다. 

 

String s = br.readLine();

// 편지의 내용 S에 'A'가 있다면 S에 있는 'B', 'C', 'D', 'F'를 모두 'A'로 변경한다.
if (s.contains("A")) {
    String[] target = new String[]{"B","C","D","F"};
    for (String t : target)
        s = s.replaceAll(t, "A");
    System.out.println(s);
    return;
}

// 'A'가 없고 'B'가 있다면 S에 있는 'C', 'D', 'F'를 모두 'B'로 변경한다.
if (s.contains("B")) {
    String[] target = new String[]{"C","D","F"};
    for (String t : target)
        s = s.replaceAll(t, "B");
    System.out.println(s);
    return;
}

// 'A'와 'B'가 없고 'C'가 있다면 S에 있는 'D', 'F'를 모두 'C'로 변경한다.
if (s.contains("C")) {
    String[] target = new String[]{"D","F"};
    for (String t : target)
        s = s.replaceAll(t, "C");
    System.out.println(s);
    return;
}

// 'A', 'B'와 'C'가 모두 없다면 S에 있는 모든 문자를 'A'로 변경한다.
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++)
    sb.append('A');
System.out.println(sb);

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();

        if (s.contains("A")) {
            String[] target = new String[]{"B","C","D","F"};
            for (String t : target)
                s = s.replaceAll(t, "A");
            System.out.println(s);
            return;
        }

        if (s.contains("B")) {
            String[] target = new String[]{"C","D","F"};
            for (String t : target)
                s = s.replaceAll(t, "B");
            System.out.println(s);
            return;
        }

        if (s.contains("C")) {
            String[] target = new String[]{"D","F"};
            for (String t : target)
                s = s.replaceAll(t, "C");
            System.out.println(s);
            return;
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++)
            sb.append('A');
        System.out.println(sb);
    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글