개발 공부~

[백준 - 1543] 문제검색 .java 본문

코딩테스트/백준

[백준 - 1543] 문제검색 .java

머밍 2025. 4. 1. 16:01

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 함수를 쓰니 너무 간단해지는 문제였다