https://www.acmicpc.net/problem/14426
14426번: 접두사 찾기
문자열 S의 접두사란 S의 가장 앞에서부터 부분 문자열을 의미한다. 예를 들어, S = "codeplus"의 접두사는 "code", "co", "codepl", "codeplus"가 있고, "plus", "s", "cude", "crud"는 접두사가 아니다. 총 N개의 문자
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
String[] s = new String[n];
for(int i=0; i<n; i++) s[i] = br.readLine();
int answer=0;
while(m-- >0){
String str= br.readLine();
for(int i=0; i<n; i++){
int correct =0;
for(int j=0; j<str.length(); j++){ // 한 알파벳씩 검사
if(s[i].charAt(j) == str.charAt(j)) correct++; //같으면 다음 알파벳 비교
else break; // 다르면 집합 S의 그 다음 문자열 비교하러
}
if(correct == str.length()) { // 검사해야하는 단어 전체가 포함되어 있으면
answer++;
break;
}
}
}
System.out.println(answer);
}
}
입력받은 단어를 집합S에 있는 단어들의 같은 인덱스의 알파벳끼리 비교한다.
알파벳이 비교해서 같으면 그 다음 인덱스의 알파벳을 비교하고, correct 변수를 증가시켜 correct 값이 입력받은 단어의 알파벳 개수와 같아지면 그 단어는 접두사이다.
알파벳을 비교했을 때 같지 않으면 입력받은 단어와 집합 S의 그 다음 단어를 비교하러 간다.
그냥 이렇게 correct변수를 만들어 인덱스로 비교해 풀었는데, 다른 풀이들을 보니 메서드를 통해서도 간단하게 풀 수 있었다.
앞으로 다양한 메서드들을 잘 활용해서 풀어봐야겠다.
equals, substring 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
String[] s = new String[n];
for(int i=0; i<n; i++) s[i] = br.readLine();
int answer=0;
while(m-- >0){
String str= br.readLine();
for(int i=0; i<n; i++){
if(str.equals(s[i].substring(0, str.length()))){
answer++;
break;
}
}
}
System.out.println(answer);
}
}
startsWith 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
String[] s = new String[n];
for(int i=0; i<n; i++) s[i] = br.readLine();
int answer=0;
while(m-- >0){
String str= br.readLine();
for(int i=0; i<n; i++){
if(s[i].startsWith(str)){
answer++;
break;
}
}
}
System.out.println(answer);
}
}
'ALGORITHM' 카테고리의 다른 글
[JAVA] 백준 1712번- 손익분기점 (0) | 2022.08.08 |
---|---|
[JAVA] 백준 1065번- 한수 (0) | 2022.08.07 |
[JAVA] 백준 18870번- 좌표 압축 (0) | 2022.08.05 |
[JAVA] 백준 1758번- 알바생 강호 (0) | 2022.08.05 |
[JAVA] 백준 1316번- 그룹 단어 체커 (0) | 2022.08.04 |