[BOJ] 2866 문자열 잘라내기 - JAVA
📚 Problem
📝 Solution
Key Idea
- 입력받은 문자열들의 세로로 문자열들을 넣은
List
를 최초에 한번만 생성- 가장 위의 행을 제외한 세로 문자열들에 중복이 없다면
- 실제로 문자열 하나를 삭제하는 것이 아닌
idx
를 증가시켜 세로 문자열들의 앞에서 하나씩 잘라준다- 중복검사는 세로 문자열들을
Map
에key
로 넣고value
는 개수로 둬서- 만약
value
가 2이상이라면 중복이 발생한 것이므로 count 개수를 출력하고 프로그램을 종료한다- 중복이 발생하지 않았다면
count++
하고idx++
해주어 가장위의 행을 지운 것과 같은 효과를 본다
private static boolean isDup(ArrayList<String> list, int idx) {
Map<String, Integer> map = new HashMap<>();
for (String col : list){
col = col.substring(idx);
map.put(col, map.getOrDefault(col, 0) + 1);
if (map.get(col) >= 2)
return true;
}
return false;
}
💻 Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
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 count = 0, idx = 1;
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
ArrayList<String> list = new ArrayList<>();
for(int i = 0; i < R; i++)
list.add(br.readLine());
ArrayList<String> colStrings = makeCols(list, C);
while (true) {
if (isDup(colStrings, idx)) {
System.out.println(count);
break;
} else {
count++;
idx++;
}
}
}
private static ArrayList<String> makeCols(ArrayList<String> list, int C) {
ArrayList<String> temp = new ArrayList<>();
for (int i = 0; i < C; i++) {
StringBuilder builder = new StringBuilder();
for (String s : list)
builder.append(s.charAt(i));
temp.add(builder.toString());
}
return temp;
}
private static boolean isDup(ArrayList<String> list, int idx) {
Map<String, Integer> map = new HashMap<>();
for (String col : list){
col = col.substring(idx);
map.put(col, map.getOrDefault(col, 0) + 1);
if (map.get(col) >= 2)
return true;
}
return false;
}
}
Author And Source
이 문제에 관하여([BOJ] 2866 문자열 잘라내기 - JAVA), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@choi-jaewon/BOJ-2866-문자열-잘라내기-JAVA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)