728x90
https://www.acmicpc.net/problem/2179
2179번: 비슷한 단어
첫째 줄에 S를, 둘째 줄에 T를 출력한다. 단, 이 두 단어는 서로 달라야 한다. 즉, 가장 비슷한 두 단어를 구할 때 같은 단어는 제외하는 것이다.
www.acmicpc.net
문제 설명이 투박했던 문제..
풀이 과정도 고민 시간도 그리 길지 않았는데
도대체 문자열 선택 기준이 어케 되는지 헷갈렸당
그냥 모든 문자열끼리 다 비교하고 비슷한 알파벳 수가 많은 단어를 앞에서부터 2개 출력하면 되는거였음~
자바 코드)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class boj2179 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
List<String> arr = new ArrayList<>();
for(int i=0;i<n;i++) {
String str = scanner.next();
if(!arr.contains(str)) {
arr.add(str);
}
}
int a = 0;
int b = 0;
int max = 0;
for(int i=0;i<n-1;i++) {
String str1 = arr.get(i);
for(int j=i+1;j<n;j++) {
String str2 = arr.get(j);
int count = 0;
int len = (str1.length()<str2.length()) ? str1.length() : str2.length();
for(int k=0;k<len;k++) {
if(str1.charAt(k)!=str2.charAt(k)) {
break;
}
count++;
}
if(max<count) {
max = count;
a = i;
b = j;
}
}
}
System.out.println(arr.get(a));
System.out.println(arr.get(b));
}
}
첨에 비교해서 같은 단어 개수를 2차원 배열에 저장하고 최댓값을 구했는데 메모리 초과더라구
그래서 생각해보니까 굳이 그럴 필요가 없더라구?
그냥 인덱스 값만 저장해서 비교하면 되더라~
뭐 쉬웠는데 내 고민과정 몇개만 말하면 이러하다~
1. 같은 단어는 비교하지 않으므로 애초에 문자열 입력 받을 때 같은 문자열은 저장 안하기
2; 이중 for 문으로 앞에서부터 문자열끼리 비교하고 다르면 바로 break!
3. 여러 개면 앞에서부터 순서대로 그냥 출력해버리기
별거 없지?
그냥 알바하면서 고민 좀 하고 그걸로 바로 구현했지모야~
끝~ 빠잉!
728x90
'코딩테스트 > BOJ' 카테고리의 다른 글
[백준] 1451. 직사각형으로 나누기 - JAVA (1) | 2022.09.26 |
---|---|
[JAVA] 백준 11724번 - 연결 요소의 개수 (0) | 2022.05.18 |
[JAVA] 백준 9095번 - 1, 2, 3 더하기 (0) | 2022.05.04 |
[그리디] 백준 11399번 ATM (0) | 2022.02.28 |
[JAVA] 백준 2512번 - 예산 (0) | 2022.02.22 |
댓글