백준 - 10820번 - 문자열 분석

이상훈·2023년 4월 16일
0
post-custom-banner

10820번

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {

	static int[] arr;

	public static void main(String[] args) throws IOException {

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();


		String num;
		while ((num = bf.readLine()) != null) {

			solve(num);
			for (int i = 0; i<arr.length; i++) {
				sb.append(arr[i]).append(" ");
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}

	private static int[] solve(String text) {

		arr = new int[4];
		for (int i = 0; i<text.length(); i++) {
			if (text.charAt(i)-0 == 32) {
				arr[3]++;
			} else if (text.charAt(i)-0 >= 65 && text.charAt(i)-0 <= 90) {
				arr[1]++;
			} else if (text.charAt(i)-0 >= 97 && text.charAt(i)-0 <= 122) {
				arr[0]++;
			} else if (text.charAt(i)-0 >= 48 && text.charAt(i)-0 <= 57) {
				arr[2]++;
			}
		}

		return arr;
	}

}

풀이


문자열을 주고 소문자, 대문자, 띄어쓰기, 숫자가 각각 몇개인지 출력하는 문제다.

text.charAt(i)-0

아스키코드를 활용해서 위의 코드가 문자를 숫자로 변환하고 범위를 통해서 판별할 수 있게 된다.

이 문제는 더 이상 입력받지 않으면 자동 종료하는 문제다.

while ((num = bf.readLine()) != null)

위와 같이 해주면 된다.

그냥 문자랑 대응시켜도 가능했다...

// 소문자
if (input.charAt(i) >= 'a' && input.charAt(i) <= 'z') {
    arr[0] += 1;
}
// 대문자
if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') {
    arr[1] += 1;
}
// 숫자
if (input.charAt(i) >= '0' && input.charAt(i) <= '9') {
    arr[2] += 1;
}
// 공백
if (input.charAt(i) == ' ') {
    arr[3] += 1;
}
post-custom-banner

0개의 댓글