언어/[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);
    }
}