백준 2941번 크로아티아 알파벳 찾기 Java
정답
package baekjoon;
import java.util.Scanner;
public class Problem2941 {
//크로아티아 알파벳 선언
static String[] croatiaAlphabat = {"c=","c-","dz=","d-","lj","nj","s=","z="};
public static void main(String[] args) {
/* 주의 해야 될것
* 1. 크로아티아 알파벳 짜르고 붙이면 붙인 문자열이 또 다른 크로아티아 알파벳이 될 수 있음 ex) nljj
* 2. c=c= 와 같은 두개의 동일한 크로아티아 알파벳 들어갔을 경우 처리해주기.
*/
Scanner s = new Scanner(System.in);
String test = s.nextLine();
System.out.println(resultCroatiaAlphabat3(test));
}
static private int resultCroatiaAlphabat3(String test) {
String[] testArray; // split된거 담을 변수
String concatString = test; // 공백없는 문자열
String inputString = test;// 비교당할 문자열 " "공백넣어줘서 구별
int result = 0;
for (String croatiaAlphabats : croatiaAlphabat) {
if(inputString.contains(croatiaAlphabats)) {
testArray = test.split(croatiaAlphabats);
concatString = "";
for (String string : testArray) {
concatString += string + " ";
}
int resultLength = (test.length() - concatString.replaceAll(" ", "").length() ) / croatiaAlphabats.length();
inputString = concatString;
test = concatString.replaceAll(" ", "");
result += resultLength;
}
}
return concatString.replaceAll(" ", "").length() + result;
}
}
| cs |
접근방법.
1. 문자열 비교 방법 ?
- 확인된 문자는 짜르고 붙인다.
2. 짜르는 방법은 ?
- 해당된 문자열 부터 크로아티아알파벳 크기만큼 substring 해주기.
- 해당된 크로아티아알파벳을 기준으로 split으로 배열로 나눠주기
2가지 방법 중 선택
3. 해당된 크로아티아 알파벳은 한번밖에 확인 못한다.
- 중복적으로 나온 크로아티아 알파벳 처리하기.
생각해볼것.
1. 크로아티아알파벳 배열 선언을 하여 8개의 크로아티아알파벳을 넣어주고,
입력된 문자열을 비교했을때, 동일한 크로아티아알파벳이 연속될 경우 중복처리를 해줘야함.
ex) c=c=
split("c=") 하면 c=c= 가 전부사라짐. 그런 경우 크로아티아알파벳 2개존재유무 처리
int resultLength =
(test.length() - concatString.replaceAll(" ", "").length() ) / croatiaAlphabats.length(); | cs |
2. 문자열을 split 한후 concatString 변수에 붙여주면 원래는 없었던 크로아티아 문자가 생겨남
ex) nljj 에서 lj을 제외 한후 붙이면 nj가 됨 nj도 크로아티아알파벳이므로 2를 출력하게된다 (정답은 3이다.)
여기서 lj 를 빼면 |
nj가 된다. 그런데 nj는 크로아티알파벳이므로 크로아티알파벳으로 인식되어서 결과 값이 2로 나온다. |
split해준 배열을 이어줄때는 + " "; 로 공백을 하나씩 줘서 방지해주자. |
구분을 하기위해서 비교당할 변수인 conactString에 split 한 자리를 공백을 주고 이어붙인다.
for (String string : testArray) {
concatString += string + " ";
}
| cs |
- 중복처리는?
크로아티아알파벳 8개를 배열로 담아서 한개씩 돌렸다.
하지만 한번 검사된 크로아티알파벳은 또 다시 검사하지 않는다.
split("크로아티아알파벳") 으로 포함된 크로아티아알파벳 전부다 제외시켜주고
concatString 변수에 넣어준다.
그런다음 ( split 하기전 String의 길이 - split 한 후 String 의 길이 ) / 크로아티아알파벳의 크기
를 해주면 중복처리까지 해줄 수 있다.
ex) ac=c=a 에서 c=c= 를 빼보자. (6-2)/2 = 2 이므로 총 2개의 크로아티아알파벳.
주의할점은 우리가 위에서 다시 이어붙여줄때 공백을 줬으므로 공백을 전부 제외해서 비교를 해줘야한다.
댓글
댓글 쓰기