Notice
Recent Posts
Recent Comments
Link
개발 공부~
[백준 - 1543] 문제검색 .java 본문
https://www.acmicpc.net/problem/1543
풀이
- 문자의 첫 글자부터 순회 -> 주어진 단어와 비교 -> 같으면 개수 올리기
- substring 이용 -> IndexOutOfBoundsException 발생을 막기 위해 남은 문자열의 길이 조건 필수
- 찾으면 건너뛰고 아니면 하나씩 증가해서 계속 검사한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String find = br.readLine();
int answer = 0;
int now =0;//현재 탐색 위치
while(str.length()-now>=find.length()) {//남은 문자열이 find보다 길거나 같을때만
if (str.substring(now, find.length() + now).equals(find)) {
answer++;
now += find.length();//찾았으면 건너뛰기
} else {
now++;
}
}
System.out.println(answer);
}
}
다른 풀이 - charAt()
한글자씩 검사 -> 이중 for문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String find = br.readLine();
int answer = 0;
for(int i=0; i < str.length(); i++){
boolean isMatch = true;
for(int j =0; j < find.length(); j++){
if( i+j >=str.length() || str.charAt(i+j) != find.charAt(j)){
isMatch = false;
break;
}
}
if(isMatch) {
answer++;
i += find.length() -1;
}
}
System.out.println(answer);
}
}
다른 풀이 - indexof()
첫 글자에서부터 검색 시작 -> 처음 등장하는 인덱스를 찾고 옮겨서 반복
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String find = br.readLine();
int answer = 0;
int start = 0;
while(true){
int now = str.indexOf(find,start);
if(now < 0) break;
start=now+find.length();//건너뛰기
answer++;
}
System.out.println(answer);
}
}
다른 풀이 - replace()
replace()를 활용하여 검색하고 싶은 단어 find 변수를 str변수에서 다 제거하고 남는 글자 수를 이용
aaaaaaaa
aaa
를 입력했을 때,
replace하고 남은 문자열은 aa로 길이 2가 된다
전체 문서 길이 8 - 남은 문자열 길이 2 = 6 을 다시 find 변수 길이 3으로 나누면 답인 2가 나온다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String find = br.readLine();
String rest = str.replace(find, "");
int answer = (str.length() - rest.length()) / find.length();
System.out.println(answer);
}
}
replace 함수를 쓰니 너무 간단해지는 문제였다
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 - 10158] 개미 .java (1) | 2025.04.11 |
---|---|
[백준 - 13223] 소금 폭탄 .java (1) | 2025.04.10 |
[백준 - 1157] 단어 공부. java (1) | 2025.04.01 |
[백준 - 1919] 애너그램 만들기 (0) | 2025.03.31 |
[백준 - 2386] 도비의 영어 공부 .java (1) | 2024.09.08 |