🏆 문제정보
문제 난이도 : 하
문제 유형 : 구현
📌 생각
두 가지 방법으로 풀려고 한다.
1. substring 이용하는 방법
2. contains 와 replace api를 이용하는 방법
📌1. substring
단순하게 생각해서,
i부터 2번째
i부터 3번째 단어를 확인한다.
만약 단어가 일치한다면 count를 증가시키고, continue를 통해 다음 loop를 진행한다.
이 때 포인트는 크게 2가지가 있다.
🔥 포인트 1
a: for <- 입력값 loop:
substring 2,3개
for <- 크로아티아 알파벳과 일치하는지 확인하는 루프:
만약 일치한다면:
count++
i=i+1
continue a;
for loop에서 i값을 증가시켜서 loop를 돌게 되면 for loop가 시작될 때 i가 다시 한번 증가되기 때문에, 만약 i+2를 해줄거면 i+1을 해줘야 한다.
또한 continue나 break는 default가 가장 가까운 loop고, 지정하면 지정한 곳으로 빠져나간다 ( go to )
🔥 포인트 2
subString은 해당 index+1 까지만 해당된다. 그래서 substring +3 값을 확인하기 위해 String s 의 뒤에 쓰레기 값 2개를 넣어주었다. loop는 뒤에 쓰레기값 2개를 뺀 것까지만 진행하면 된다.
🔥 코드
package src.backjoon.크로아티아알파벳;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Croatia {
static String[] arr = {"c=","c-","dz=","d-","lj","nj","s=","z="};
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(System.in);
String s= sc.next();
String sPlusTrash = s+"**";
int count=0;
a:for(int i=0;i<sPlusTrash.length()-2;i++){
String s1 = sPlusTrash.substring(i, i + 2);
String s2 = sPlusTrash.substring(i, i+3);
for(String v : arr){
if(s1.equals(v)){
count+=1;
i=i+1;
continue a;
}else if(s2.equals(v)){
count+=1;
i=i+2;
continue a;
}
}
count+=1;
}
System.out.println(count);
}
}
📌 2. contains, replace 이용
replace = s.replace(value, " ");
이 때 조심할 점은 위와 같은 실수를 했는데, 이렇게 하면 바뀐 문자열에 다시 쌓여서 진행되는게 아니고, 마지막 문자열만 치환된게 replace에 들어가게 되는 것이다.
🔥 코드
package src.backjoon.크로아티아알파벳;
import java.util.Scanner;
public class CroatiaV2 {
static String[] arr = {"c=","c-","dz=","d-","lj","nj","s=","z="};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = "ljes=njak";
for(String value : arr){
System.out.println(value);
if(s.contains(value)){
s = s.replace(value, " ");
}
}
System.out.println(s.length());
}
}
'알고리즘 > 📌백준' 카테고리의 다른 글
백준: Z (0) | 2021.08.20 |
---|---|
백준: 배열돌리기 3 (0) | 2021.08.12 |
백준 : 2493번 탑 (0) | 2021.08.05 |
백준 : 스위치 켜고 끄기 (0) | 2021.08.02 |
백준 : 재귀함수가 뭔가요? (0) | 2021.08.02 |
댓글