문제 출처 - Baekjoon Online Judge
문제는 여기
[문제]
피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다.
문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문자열인지 아닌지 구하는 프로그램을 작성하시오.
[입력]
첫째 줄에 문자열 S가 주어진다. 문자열은 알파벳 소문자로 이루어진 문자열이며, 길이는 5000을 넘지 않는다.
[출력]
문자열 S가 "pi", "ka", "chu"를 이어 붙여서 만들 수 있으면 "YES"를 아니면 "NO"를 출력한다.
[풀이]
1. 입력받은 문자열에서 "pi", "ka", "chu"인 경우 다 지워준다.
2. 지워진 문자열이 빈 문자열이라면 "YES"를 출력해주고 아니라면 "NO"를 출력해준다.
[접근]
1. replace를 사용해서 "pi", "ka", "chu"인 경우 다 공백으로 바꿔주는 것으로 접근하였다.
2. 이 경우 먼저 지워진 문자에 따라서 뒤에 문자가 지워지는 문제가 발생해 접근이 틀렸었다.
3. replaceAll을 사용해 해당 경우를 한 번에 처리를 해주고 빈 문자열이라면 "YES"를 출력해주고 아니라면 "NO"를 출력해준다.
[코드]
replace를 썼을 때 (오답)
package BOJ_silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main_S5_14405 {
static String str;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
str = str.replace("pi", "");
str = str.replace("ka", "");
str = str.replace("chu", "");
if (str.equals(""))
System.out.println("YES");
else
System.out.println("NO");
}
}
이 방법으로 하였을 때 kpia 같은 경우 pi가 먼저 사라지고 ka가 다음으로 사라지기 때문에 no가 출력되어야 하지만 yes로 출력이 되었다. 이를 해결할 방법이 필요했다.
replaceAll를 사용했을 때 (정답)
package BOJ_silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main_S5_14405 {
static String str;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
str = str.replaceAll("pi|ka|chu", "");
if (str.equals(""))
System.out.println("YES");
else
System.out.println("NO");
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S4 1822번 차집합 (JAVA) (0) | 2021.11.27 |
---|---|
[백준] S2 22233번 가희와 키워드 (JAVA) (0) | 2021.11.25 |
[백준] S3 3273번 두 수의 합 (JAVA) (0) | 2021.11.21 |
[백준] S3 18429번 근손실 (JAVA) (0) | 2021.11.20 |
[백준] S1 17609번 회문 (JAVA) (0) | 2021.11.20 |