728x90
2941번: 크로아티아 알파벳 (acmicpc.net)
간단하게 풀었다고 생각하는데 40분이나 걸렸다.
내가 아는 지식 수준으로는 문자열을 substring으로 각각 두 글자 세 글자 잘라서 배열 안에 목록을 넣어놓고 비교했는데
contains라는 좋은 메소드를 알게되었다 !
기존 내가 만든 코드
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MulticastSocket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String arr[] = {"c=","c-","dz=","d-","lj","nj","s=","z="};
int count =0;
while(str.length() >0){
boolean ch = false;
String alpha ="";
String beta = "";
if(str.length()>=2)
alpha = str.substring(0,2);
if(str.length()>=3)
beta = str.substring(0,3);
for(int j=0;j<arr.length;j++) {
if(alpha.equals(arr[j])) {
count++;
str = str.substring(2);
ch=true;
}
else if(beta.equals(arr[j])) {
count++;
str = str.substring(3);
ch=true;
}
}
if(ch == false) { //배열에 저장된 크로아티아 알파벳이 아니라면
count++;
str = str.substring(1);
}
}
System.out.println(count);
}
}
contains를 이용해 새로구성한 코드
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MulticastSocket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String arr[] = {"c=","c-","dz=","d-","lj","nj","s=","z="};
int count =0;
for(int i=0;i<arr.length;i++) {
if(str.contains(arr[i])) {
str = str.replace(arr[i],"*");
}
}
System.out.println(str.length());
}
}
시간은 비슷하지만 정말 간단해졌따 코드가
근데 신기한게 z=z= 같이 배열 요소 마지막에서 이 문자열을 한 번 잡아서 *로 바꿨을 거 아냐 ? 그럼 반복이 끝나는데 어떻게 두 개를 캐치한 걸까 ? 근데 이거 쓰면서 생각이 났는데 replace가 arr[i] (z=)이 있는 모든 구간을 찾아 *로 변환시켜주는 거 같다!
728x90
'알고리즘 > 백준' 카테고리의 다른 글
25206번 문제 : 너의 평점은 (0) | 2023.05.02 |
---|---|
1316번 문제 : 그룹 단어 체커 (0) | 2023.04.30 |
4344번 문제 : 평균은 넘겠지 (0) | 2023.04.25 |
10988번 문제 : 팰린드롬인지 확인하기 (0) | 2023.04.25 |
2444번 문제 : 별 찍기 - 7 (0) | 2023.04.24 |