알고리즘
백준 1316 (Java)
Codult
2023. 11. 27. 17:54
728x90
1) 입력받은 문자열을 char 배열로 변환한다.
2) char 배열을 for문 돌리면서 동일한 알파벳이 나타나면, 해당 인덱스를 삽입할 List<Integer> sameChar를 선언한다.
3) for문을 돌려 해당 char 요소와 동일한 요소의 index를 미리 선언한 sameChar에 추가한다.
4) 그룹 단어가 아니라면, +2이상 차이나는 값이 sameChar에 연속적인 인덱스로 들어갈 수 밖에 없다.
ex) ccaaaba -> sameChar에는 a에 대한 첫번째 for문 만으로 이미 '2', '3', '4', '6'이 들어간다. c의 경우, 연속적인 숫자가 들어가는 것은 아니지만 1이하(ex. -1, -2)로 차이가 있다.
5) sameChar에서 바로 다음 값과 +1 초과하는 차이가 날 때, 이는 그룹단어가 아니므로, 미리 선언해둔 nonGroup에 +1을 해주고, 바로 break 하여 중복으로 계산되지 않도록 한다.
6) 전체 입력받은 문자열의 갯수에서 nonGroup을 뺀 결과를 출력한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int nonGroup = 0; // 그룹단어가 아닌 단어의 갯수
for (int i=0; i<num; i++){
List<Integer> sameChar = new ArrayList<>();
char[] word = sc.next().toCharArray();
for (int j=0; j<word.length; j++){
char c = word[j];
for (int k=0; k<word.length; k++){
if (c==word[k]) sameChar.add(k);
}
}
for (int k=0; k<sameChar.size()-1; k++){
if (sameChar.get(k+1)-sameChar.get(k)>1) {
nonGroup++;
break;
}
}
}
System.out.println(num-nonGroup);
}
}
728x90