https://www.acmicpc.net/problem/1316
문제
설계
메인과 처리함수를 나누어 설계하려 한다.
메인에서는 Scanner를 이용해 입력받을 단어수를 N을 입력받으면,
해당 수만큼 for문을 돌려가며 처리함수를 불러 결과값을 구해 출력하게 한다.
처리함수는 입력받은 문자열을 받아서 char 별로 set 자료구조를 이용해 검사할 것이다.
set은 중복검사에 용이하고 빠른 접근이 가능한 자료구조이기에 문제를 보자마자 떠올랏다.
풀이
import java.util.HashSet;
import java.util.Scanner;
public class Main {
static int ans;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ans = n;
for(int i=0;i<n;i++) {
String str = sc.next();
checkFunc(str);
}
System.out.println(ans);
}
private static void checkFunc(String str) {
HashSet<Character> set = new HashSet<>();
char ch = str.charAt(0);
set.add(ch);
for(int i=0;i<str.length();i++) {
if(ch == str.charAt(i))
continue;
else {
if(set.contains(str.charAt(i))) {
ans--;
return;
}
else {
ch = str.charAt(i);
set.add(ch);
}
}
}
}
}
나는 전역변수 ans를 선언해서 입력받은 단어갯수중에서 그룹단어가 아닐때마다 하나씩 빼주었다.
코드가 조금 길어졌지만, 메모리를 많이 먹지 않았다.
'Algorithm > Weekly Solved' 카테고리의 다른 글
[백준 1920] 수찾기 - Java코드 (0) | 2021.12.06 |
---|---|
[2021 KAKAO] 메뉴 리뉴얼 - Java코드 ★★★ (0) | 2021.11.30 |
[2021 KAKAO] 신규 아이디 추천 - Java코드 (0) | 2021.11.24 |
[백준 2941] 크로아티아 알파벳 - Java 코드 (0) | 2021.11.24 |
[위클리챌린지] 8주 - 최소 직사각형 - Java코드 (0) | 2021.10.25 |