설명 대로 그룹 단어의 개수를 출력하는 문제입니다.
그룹 단어란 예제처럼 happy new year a b c 같이 이미 나왔던 알파벳이 또 다시 나오는 경우는 그룹 단어에서
제외 됩니다.
무조건 제외 되지는 않습니다.
알파벳이 연속으로 나오는 경우는 그룹단어입니다.
happy처럼 pp가 연속으로 나왔으니 그룹단어입니다. 만약 happyp 처럼 pp다음 y가오고 p가 다시온다면
그룹단어에서 제외됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.io.InputStreamReader;
class Main {
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int result = n;
StringTokenizer st;
for(int i=0; i<n; i++){
st = new StringTokenizer(br.readLine());
String s = st.nextToken();
int cnt = 0;
for(char c='a'; c<='z'; c++){
int first = s.indexOf(c);
int last = s.lastIndexOf(c);
if(first!=last){
for(int j=first+1; j<last; j++){
if(s.charAt(j)!=c){
cnt++;
break;
}
}
}
}
if(cnt!=0){
result--;
}
}
System.out.println(result);
}
}
사용된 라이브러리 입니다.
입력은 BufferedReader를 사용했습니다.
먼저 첫줄에 나오는 단어의 개수 n을 받습니다.
그리고 result 변수는 마지막에 출력될 그룹 단어의 개수입니다.
단어의 개수 만큼 반복합니다.
반복하면서 StringTokenizer로 토큰을 받아오며, cnt는 그룹 단어가 아닌 것을 체크하기 위한 카운트변수입니다.
처음 들어온 단어를 검사하면서 a부터 z까지 반복합니다.
그리고 c에 해당하는 알파벳의 인덱스 위치를 앞과 뒤에서 찾습니다.
first 와 last의 위치가 같으면 문자가 한개이니 그룹단어 입니다.
first와 last는 같은 알파벳이니 반복문에서 제외하고 그 사이에 있는 값들을 비교합니다.
현재찾은 알파벳이 first와 last 사이에 있는 알파벳과 다르다면 반복해서 알파벳이 등장한게 아니므로
그룹단어에서 제외됩니다.
cnt를 하나 더해주고 break로 빠져나갑니다.
cnt가 0이 아니니 그룹단어가 아니므로 result를 한개 빼줍니다.
결과를 출력합니다.
다른 풀이 입니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int count = T;
for (int i = 0; i < T; i++) {
String word = sc.next();
for (int j = 1; j < word.length(); j++) {
if (word.indexOf(word.charAt(j - 1)) > word.indexOf(word.charAt(j))) {
count--;
break;
}
}
}
System.out.println(count);
}
}
단어의 개수만큼 count를 초기화 해줍니다.
이중 반복문으로 큰 반복문은 역시 단어의 개수 만큼 반복합니다.
작은 반복문은 단어의 길이만큼 반복합니다.
if문을 보시면 처음문자와 두번째 문자를 비교하고 그다음 두번째 문자와 세번째 문자를 비교하며
진행됩니다.
indexOf는 알파벳이 문자열 중 제일먼저 나온 index 위치를 알려주기 때문에 if문 앞에 해당하는 index의 길이가 더
크다면 이미 등장한 알파벳이 다시 등장한 것이 됩니다.
예로 들면 aba라는 단어라 한다면 처음에 a와 b를 비교합니다. 0 1 값이 나오므로 b가 더 크니 count-- 하지않습니다.
다음 b와 a를 비교합니다. 1 0 값이 나옵니다.
'알고리즘 with JAVA' 카테고리의 다른 글
백준 9012번 괄호 - 자바 (스택 활용) (0) | 2021.05.21 |
---|---|
백준 11718번 문제 그대로 출력하기 - with 자바 (0) | 2021.05.13 |
백준 2941 크로아티아 알파벳 - 자바 (0) | 2021.04.13 |
백준 5622번 다이얼 - 자바 (0) | 2021.04.12 |
백준 2908번 상수 - 자바 (0) | 2021.04.12 |