언어/[Java]
[Java] 백준 1152, 1316
dayeonsheep
2023. 7. 28. 18:22
- 1152
import java.util.StringTokenizer;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
// st 에 공백을 기준으로 나눈 토큰들을 st 에 저장
StringTokenizer st = new StringTokenizer(s, " ");
// countTokens() 는 토큰의 개수를 반환
System.out.println(st.countTokens());
}
}
StringTokenizer라는 걸...
tringTokenizer 을 사용하여 분리 기준을 공백으로 지정해주면 공백을 기준으로 나뉘어 토큰에 저장해주는 것
그 분류된 단어들을 토큰이라고 함
- 내 풀이
import java.util.Scanner;
public class BOJ1152 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
int cnt = 0;
str = sc.nextLine();
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == ' ') {
cnt++;
}
}
// 시작 끝 중 하나만 공백인 경우는 cnt 값 변화 없음
if(str.charAt(0) == ' ' && str.charAt(str.length()-1) == ' '){
cnt -= 1; //시작 끝이 둘 다 공백인 경우에는 공백-1 해야 단어 개수
}
if(str.charAt(0) != ' ' && str.charAt(str.length()-1) != ' ') {
cnt += 1; // 시작 끝 공백 아니면 공백+1 해야 단어 개수
}
System.out.println(cnt);
}
}
charAt 사용해서 풀었음
- 1316
- for문 label 사용한 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 단어 입력 개수
int count = 0; // 그룹단어 개수
for(int i=0; i<N; i++) {
String str = sc.next();
char [] alpha = new char [str.length()];
int last = 0;
// 입력받은 문자열을 문자로 쪼개서 배열에 입력
for(int j=0; j<str.length(); j++) {
alpha[j] = str.charAt(j);
}
// 단어의 길이가 2 이하라면 무조건 그룹 단어
if(str.length()<=2) {
count++;
continue;
}
// 그룹 단어인지 아닌지 판단
loop: // for문 이름 지정
for(int k=0; k<str.length()-1; k++) {
if(alpha[k] == alpha[k+1]) // k번과 k+1이 같으면 넘어가
continue;
if(alpha[k] != alpha[k+1]) { // 만약 다르다면
for(int h=0; h<k; h++) { // k+1 전에 일치하는 단어가 있으면 그룹단어가 아님
if(alpha[h] == alpha[k+1]) {
last++;
break loop; // 이름 loop인 for문 나가기
}
}
// 일치하는 단어가 없으면 다음 k번 진행
}
}
if(last == 0)
count++;
}
System.out.println(count);
}
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int cnt = 0; // 그룹 단어 개수
for (int i = 0; i < N; i++) {
String S = sc.next();
boolean check[] = new boolean[26]; // 알파벳=26개 사용 내역 확인하는 배열 만들어줌
boolean tmp = true; // boolean변수 생성. 배열 초기값 false ,true로 저장
for (int j = 0; j < S.length(); j++) {
int index = S.charAt(j)-'a'; /* -97해도 되는 건 알겠는데 왜 빼주는거지?
--> 인덱스로 접근, 0번부터 넣어주려고!! 빼주는거임
if(check[index]) { // 이전에 사용한적이 있는 문자인지 체크
if(S.charAt(j) != S.charAt(j-1)) { // 이전 문자와 같지 않으면
tmp = false; // 그룹 단어가 아님
break;
}
}else { // 이전에 사용한적이 없는 문자라면
check[index] = true; // 문자 사용 체크
}
}
if(tmp) cnt++;
}
//boolean 초기값은 false니까 처음엔 무조건 else로 빠져나감
//인덱스 안에 값이 true에 해당하고 이전 값이 같지 않으면 이미 그룹단어가 아니니까 빠져나옴
System.out.println(cnt);
}
}