문제
https://www.acmicpc.net/problem/2607
풀이 과정
코드를 작성하기 전에는 각 문자를 인덱스로 써서 문자별 개수를 cnt하고 이를 비교해야겠다까지 설계하고 시작했다. 하지만, 첫 번째 문자열 길이가 더 큰지, 주어지는 문자열 길이가 더 큰지 등 조건까지 같이 떠올리는 연습이 필요한 것 같다.
아래는 문자열 길이 차이가 2이상이면 비교 연산없이 다음 문자열로 넘어간다. 2미만이면 같은 문자의 개수가 몇 개인지 count하여 주어진 두 문자열 중 긴 문자열의 길이와의 차이가 1이하면 결괏값에 +1을 한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int result = 0;
int[] first = new int[26];
//init
String input = br.readLine();
int len = input.length();
for(int i = 0; i < len; i++){
first[input.charAt(i)-'A']++;
}
//solve
while(N-- > 1){
String word = br.readLine();
int max, min;
if(word.length() < len){
max = len;
min = word.length();
}
else{
max = word.length();
min = len;
}
if(max - min >= 2){
continue;
}
int same = 0;
int[] next = new int[26];
for(int i=word.length()-1; i>=0; i--){
int now = word.charAt(i)-'A';
if(++next[now] <= first[now]){
same++;
}
}
if(Math.abs(same - max) <= 1){
result++;
}
}
System.out.println(result);
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 14940번 : 쉬운 최단거리* (0) | 2023.03.19 |
---|---|
[Java] 백준 17142번 : 연구소 3* (0) | 2023.03.17 |
[Java] 백준 9019번 : DSLR* (0) | 2023.03.13 |
[Java] 백준 1138번 : 한 줄로 서기* (0) | 2023.03.10 |
[Java] 백준 2631번 : 줄세우기* (0) | 2023.03.10 |