728x90
반응형
2024.05.19기준 - 실버3
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 문장 내에 있는 영어 단어를 찾아 그 뜻을 알려주는 문제입니다.
이 문제의 중요한점은
- 문장 내의 단어는 중첩될 수 있다.
- 같은 위치에서 여러 단어가 시작될 경우 사전순으로 앞선 단어의 뜻을 먼저 출력한다.
제가 접근한 방식은 일단 첫 문자가 일치하는 문자열끼리만 계산을 해야겠다고 생각을 하게 되었습니다.
그래서 커스텀 class를 생성해 첫 문자와 문자열, 단어뜻을 저장하는 class를 생성했습니다.
커스텀 class를 List에 저장해 사전순으로 먼저 정렬을 했습니다.
그러면 겹치던 안겹치던 무조건 사전순으로 출력이 되기 때문입니다.
그런 후 반복문으로 첫 번째 문자가 동일하다면,
- 비교할 단어의 길이가 문자열의 길이를 넘지 않는지 확인했습니다.
- 비교할 단어와 문자열이 같은지 확인을 했습니다.
2조건을 만족했을 때, 출력을 해주고 만약 하나도 출력을 해주지 않는다면 boolean 변수로 체크를 해 -1을 출력하도록 했습니다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static class Dic {
char start;
String word;
String meaning;
public Dic (char s, String w, String m) {
start = s;
word = w;
meaning = m;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 정보의 개수
int m = Integer.parseInt(st.nextToken()); // 문장의 개수
List<Dic> list = new LinkedList<>();
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
String word = st.nextToken(); // 단어
String meaning = st.nextToken(); // 뜻
list.add(new Dic(word.charAt(0), word, meaning));
}
Collections.sort(list, (o1, o2) -> o1.word.compareTo(o2.word)); // 단어를 사전순으로 정렬
char c;
String str;
boolean check;
while (m-- > 0) {
str = br.readLine();
check = false;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
for (int j = 0; j < list.size(); j++) {
if (list.get(j).start == c) { // 첫 글자가 동일하다면
// 비교할 단어의 길이가 문자열을 넘지 않고, 두 단어가 일치 한다면
if (i + list.get(j).word.length() <= str.length() && str.substring(i, i + list.get(j).word.length()).equals(list.get(j).word)) {
check = true;
sb.append(list.get(j).meaning);
}
}
}
}
if (!check) { // 일치하는 단어가 없으면 -1을 출력.
sb.append("-1");
}
sb.append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31822번 재수강 (0) | 2024.05.21 |
---|---|
BAEKJOON / 백준 - JAVA 31823번 악질 검거 (2) | 2024.05.20 |
BAEKJOON / 백준 - JAVA 7572번 간지(干支) (0) | 2024.05.18 |
BAEKJOON / 백준 - JAVA 31825번 알파벳과 쿼리 (Easy) (0) | 2024.05.16 |
BAEKJOON / 백준 - JAVA 13567번 로봇 (0) | 2024.05.12 |