알고리즘/백준
공부 90일차: 백준 10820번 문자열 분석 자바 Java
김발자~
2022. 10. 28. 22:21
반응형
10820 문자열 분석
https://www.acmicpc.net/problem/10820
10820번: 문자열 분석
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있
www.acmicpc.net
백준 10820번 문제 문자열 분석
문제
과정 생각해보기
1. n을 어떻게 구할 것인가
지금까지 보았던 많은 문제들은 총 몇 줄이 입력되는지 알려주어서 그만큼 반복문을 돌리는 구문이 필요했는데,이 문제의 경우 n은 그냥 주어진 문자열이 끝날 때 결정된다
2. 각각의 소문자 대문자 숫자 공백이 경우 매우 간단하다
문자열을 받아서 문자 하나하나마다 소문자인지 대문자인지 숫자인지 공백인지 확인한 후count의 개수를 늘려주면 된다
이렇게만 하면 끝나는 간단한 문제
오답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), "\n");
//br.readLine()은 어차피 줄로 구분해서 StringTokenizer로 구분이 안 됨
while(st.hasMoreTokens()) {
String str = st.nextToken();
// 소문자 대문자 숫자 공백
int lower = 0;
int upper = 0;
int number = 0;
int blank = 0;
for(int i = 0; i < str.length(); i++) {
if('a'<=str.charAt(i) && str.charAt(i)<='z') { //소문자
lower++;
} else if('A'<=str.charAt(i) && str.charAt(i)<='Z') { //대문자
upper++;
} else if('0'<=str.charAt(i) && str.charAt(i)<='9') { //숫자
number++;
} else if(str.charAt(i) == ' ') { //공백
blank++;
}
}
System.out.print(lower+" "+upper+" "+number+" "+blank+"\n");
}
}
}
|
cs |
횟수를 정확히 알 수 없으므로 while문에 넣고 비교해봤는데 계속 첫 번째 줄만 출력됐다
StringTokenizer로 "\n", 즉 줄바꿈으로 구분해보려 했으나 사실 br.readLine()이 한 줄씩 입력받기 때문에 소용없었던 것..
다 치고 나서야 그걸 상기했다..
정답 인정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while((str = br.readLine()) != null){
// 소문자 대문자 숫자 공백
int lower = 0;
int upper = 0;
int number = 0;
int blank = 0;
for(int i = 0; i < str.length(); i++) {
if('a'<=str.charAt(i) && str.charAt(i)<='z') { //소문자
lower++;
} else if('A'<=str.charAt(i) && str.charAt(i)<='Z') { //대문자
upper++;
} else if('0'<=str.charAt(i) && str.charAt(i)<='9') { //숫자
number++;
} else { //공백
blank++;
}
}
System.out.println(lower+" "+upper+" "+number+" "+blank);
}
br.close();
}
}
|
cs |
주석으로 설명 붙일 만한 구간 없이 무난했다
몇 번 반복되는지 모르므로 while문의 표현식 안에 str = br.readLine()을 넣는 게 지금껏 못본 패턴인 듯
알파벳 찾기는 단계별 문제 풀어보기에서 했었던 문제라 이 문제로 넘어왔다
반응형