시간&메모리 제한
문제
입력&출력
문제풀이
2가지 방법으로 문제풀이를 진행해봤습니다.
package com.back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Back_5052 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testCase = Integer.parseInt(br.readLine());
for (int tc= 0; tc < testCase; tc++) {
int N = Integer.parseInt(br.readLine());
String[] st = new String[N];
for (int i = 0; i < N; i++) {
st[i] = br.readLine();
}
Arrays.sort(st);
boolean ans = false;
for (int i = 1; i < N ; i++) {
if(st[i-1].length()>st[i].length()) {
String tmp = st[i-1].substring(0, st[i].length());
if(tmp.equals(st[i])) {
ans=true;
break;
}
}else if(st[i-1].length()<st[i].length()) {
String tmp = st[i].substring(0, st[i-1].length());
if(tmp.equals(st[i-1])) {
ans=true;
break;
}
}else {
if(st[i-1].equals(st[i])) {
ans=true;
break;
}
}
}
if(ans==true) {
sb.append("NO\n");
}else {
sb.append("YES\n");
}
}
System.out.println(sb);
}
}
- 먼저 이 방법은 문자열을 정렬해 놓고 직접 하나씩 비교하는 방법입니다.
- 비교를 진행할 때, 문자열의 길이가 서로 다르기 때문에 조건문을 이용해서 문자열 길이 별로 진행을 했습니다.
- 저는 subString으로 문자열을 잘라냈는데...
- 또는 길이에 따라서 Contain을 이용해서 문제풀이를 좀 더 간단하게 진행할 수 있을거 같습니다.
- 두번째 방법
package com.back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Back_5052 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testCase = Integer.parseInt(br.readLine());
for (int tc = 0; tc < testCase; tc++) {
int N = Integer.parseInt(br.readLine());
boolean ans=false;
ArrayList<num> arr = new ArrayList<num>();
for (int i = 0; i < N; i++) {
String tmp = br.readLine();
arr.add(new num(tmp));
}
Collections.sort(arr);
for (int i = 1; i < N; i++) {
if(arr.get(i).num.startsWith(arr.get(i-1).num)) {
ans =true;
break;
}
}
if(ans==true) {
sb.append("NO\n");
}else {
sb.append("YES\n");
}
}
System.out.println(sb);
}
static class num implements Comparable<num> {
String num;
public num(String num) {
super();
this.num = num;
}
@Override
public int compareTo(num o) {
return this.num.compareTo(o.num);
}
}
}
- String에서 제공하는 메소드 startsWith를 이용하는 방법입니다.
- 끝 부분을 비교하는 방법으로는 EndsWith 메소드를 이용하는 방법도 있습니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_11650 좌표 정렬하기(자바) / 정렬 (0) | 2021.07.30 |
---|---|
백준_2751 수 정렬하기2(자바) / 정렬 (0) | 2021.07.29 |
백준_5525 IOIOI(자바) / 문자열 (0) | 2021.07.26 |
백준_17609 회문(자바) / 문자열 (0) | 2021.07.25 |
백준_5430 AC(자바) / 문자열 (0) | 2021.07.24 |