백준 1543(문서 검색) - Python(파이썬) - 문자열
반응형
예제 풀이
내가 생각한 풀이
1️⃣ for 루프로 ababababa 를 돌기
2️⃣ i = 0 -> aba 가 있음 -> num= 0+3 =3 대입 -> cnt값에 +1 하기
3️⃣ i = 2 -> aba가 있음 -> 3보다 작음 -> cnt값에 +1을 하지 않는다.
4️⃣ i = 4 -> aba가 있음 -> 3보다 큼 -> num = 4+3 = 7대입 -> cnt값에 +1 하기
5️⃣ i = 6 -> aba가 있음 -> 7보다 작음 -> cnt값에 +1을 하지 않는다.
따라서, cnt =2가 나온다.
💻Python(파이썬)
import sys
#문자열
n = sys.stdin.readline().strip()
#찾는 문자열
f = sys.stdin.readline().strip()
#cnt : 개수 , num : 문자열을 찾았을 경우 인덱스의 끝 값
cnt = num = 0
#문자열 길이 - 찾는 문자열 길이까지 찾아야하므로
for i in range(len(n)-len(f)+1):
#찾는 문자열이 있는 경우
if f==n[i:i+len(f)]:
#찾은 문자열의 인덱스의 끝 값 문자열의 첫값보다 작은 경우
if num<=i:
#찾은 문자열의 끝 값을 num에 저장
num =i+len(f)
#개수 +1
cnt+=1
print(cnt)
💻Python(파이썬) - 다른사람 풀이
import sys
n = sys.stdin.readline().strip()
f = sys.stdin.readline().strip()
#cnt: 개수, num : 찾는 문자열 인덱스
cnt = num = 0
while num <= len(n) - len(f):
#문자열을 찾았을 경우 -> 문자열 끝값으로 건너뛰기
if n[num:num + len(f)] == f:
#개수 +1
cnt += 1
#인덱스 건너뛰기 위해서
num += len(f)
#아닌 경우에는 +1씩 인덱스 더하기
else:
num += 1
print(cnt)
💻Java(자바)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String f = br.readLine();
int size = s.length();
int cnt =0,num=0;
while(num<=s.length()-f.length()){
boolean flag =false;
for(int i=0;i<f.length();i++){
if(s.charAt(num+i)!=f.charAt(i)){
flag=true;
}else{
flag=false;
}
}
if(flag){
cnt++;
num += f.length();
}else{
num +=1;
}
}
s = s.replace(f,"");
System.out.println((size - s.length())/f.length());
}
}
풀이 방법
① 문자열(n), 찾는 문자열(f) 받기
② 문자열에서 찾는 문자열을 빈칸으로 변경
③ 원래 문자열의 길이 - 빈칸으로 변경했을 때 길이 == (찾는 문자열 ) x (찾는 문자열의 개수) 이므로 이 식을 이용해서 구하기
💻Python(파이썬)
import sys
n = sys.stdin.readline().strip()
f = sys.stdin.readline().strip()
size = len(n)
n = n.replace(f,'')
print((size- len(n))//len(f))
💻Java(자바)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//문자열
String s = br.readLine();
//찾는 문자열
String f = br.readLine();
//문자열의 길이
int size = s.length();
//찾는 문자열의 값을 모두 빈칸으로 변경
s = s.replace(f,"");
//문자열 길이 - 빈칸으로 변경한 문자열 길이 == 찾는 문자열의 개수 * (찾는 문자열의 길이)
System.out.println((size - s.length())/f.length());
}
}
반응형
'[백준] Python,Java로 풀기📖 > 문자열' 카테고리의 다른 글
백준 1296(팀 이름 정하기 ) - Python(파이썬) - 문자열 (0) | 2022.06.01 |
---|---|
백준 9012(괄호) - Python(파이썬) - 문자열 (0) | 2022.05.27 |
백준 1120(문자열) - Python(파이썬) (0) | 2022.05.27 |
백준 1920( 수 찾기 ) - Python(파이썬) (0) | 2022.05.13 |
백준 6198(옥상 정원 꾸미기 ) - Stack , Python (0) | 2022.05.13 |