일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[BOJ] 백준 10808번 - 알파벳 개수 (Java) 본문
728x90
문제
https://www.acmicpc.net/problem/10808
- 입력 : 길이가 100이하인 소문자 문자열
- 출력 : 문자열에서 각 소문자 a~z의 개수 (공백 구분)
풀이
카운트 대상이 a~z로 고정되어 있으니, 크기 26의 int 배열을 선언한 뒤, 배열 요소 하나씩을 소문자 하나의 카운트로 사용한다. (알파벳 개수는 26개)
int[] count = new int[26];
ex) count[0] : a의 개수 / count[1] : b의 개수, / … / count[25] : z의 개수
a~z 문자는 아스키코드에서 97~122까지 순차적으로 값을 가지기 때문에, char타입 소문자 - 'a' 연산을 통해 소문자 그룹내에서 해당 문자의 순번을 알아낼 수 있다. 이 순번을 int배열의 index(0~25)로 사용한다.
ex) 'a' - 'a' = 97-97 = 0 / 'b' - 'a' = 98-97 = 1 / 'z' - 'a' = 122-97 = 25
for(char ch : str.toCharArray()){
int idx = (int)ch - 'a';
count[idx]++;
}
마지막으로, 문자열의 소문자 개수를 카운트하는 int배열을 공백을 구분자로 하는 하나의 문자열로 출력해야 하는데, Arrays.toString(int[] a) 메서드를 사용하면 아래의 문자열로 변환된다.
String result = Arrays.toString(count);
System.out.println(result);
[1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
문제에서 원하는 값은 앞뒤 대괄호와 쉼표가 없어야 한다.
replace() 와 substring() 메서드를 사용해 문자열을 적절히 가공해준다.
String result = Arrays.toString(count);
System.out.println(result.substring(1, result.length()-1).replace(",", ""));
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0
- substring(1, result.length()-1) : 문자열 맨앞, 맨뒤의 대괄호[ ]를 자르기 위해 사용
- replace(",", "") : 숫자 사이마다 존재하는 쉼표를 전부 공백으로 대체(제거)하기 위해 사용
코드
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String[] agrs){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int[] count = new int[26];
for(char ch : str.toCharArray()){
int idx = (int)ch - 'a';
count[idx]++;
}
String result = Arrays.toString(count);
System.out.println(result.substring(1, result.length()-1).replace(",", ""));
}
}
728x90
'Algorithm' 카테고리의 다른 글
[BOJ] 백준 11650번 - 좌표 정렬하기 (0) | 2021.11.26 |
---|---|
[BOJ] 백준 1463번 - 1로 만들기 (Java) (0) | 2021.11.15 |
[BOJ] 백준 2445번 - 별 찍기 8 (0) | 2021.11.11 |
[BOJ] 백준 10951번 - A+B (0) | 2021.11.09 |
[프로그래머스 / Level1] 실패율 (Java) (1) | 2021.11.08 |
Comments