Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- C
- 코딩테스트사이트추천
- 자바
- 갭체크
- 코딩테스트준비
- 데이터베이스
- 자바스크립트
- 코테공부
- 플로이드-워셜
- Java
- 오블완
- 파이썬
- 개발자루틴
- 웹
- 코딩테스트
- 항해99
- 프로그래머스
- 티스토리챌린지
- 99클럽
- 인접 행렬
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 프로그래밍 언어
- 연결 리스트
- 개발자취업
- til
- 1일1코테
- 알고리즘
- 자료구조
- 운영체제
- 코드트리
Archives
- Today
- Total
와드의 블로그
10808번: 알파벳 개수 본문
문제
단어가 주어졌을 때, 각 알파벳이 단어에 몇 개 포함되어 있는지 구하는 문제입니다.
- 입력: 첫째 줄에 영어 소문자로만 이루어진 단어 S가 주어집니다. (길이는 100을 넘지 않음)
- 출력: 단어에 포함되어 있는 a의 개수, b의 개수, ..., z의 개수를 공백으로 구분하여 출력합니다.
링크: https://www.acmicpc.net/problem/10808
풀이
알파벳 소문자는 총 26개이므로, 크기가 26인 정수형 배열을 선언하여 각 문자의 등장 횟수를 카운트하는 O(N) 풀이입니다.
- 빈도수 배열 선언: 알파벳의 개수와 동일한 크기 26의 정수 배열 cnt를 선언합니다. 자바에서 정수 배열은 생성 시 자동으로 0으로 초기화됩니다.
- 아스키코드 활용 (인덱싱): 문자열을 순회하며 각 문자 c에서 'a'(아스키코드 97)를 빼주면 0부터 25 사이의 인덱스를 얻을 수 있습니다. ('a' - 'a' = 0, 'b' - 'a' = 1, ...) 이를 활용해 배열의 해당 인덱스 값을 1씩 증가시킵니다.
- 출력: cnt 배열을 0부터 25까지 순회하며 공백으로 구분하여 출력합니다.
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
// 알파벳 소문자(a~z) 개수에 맞춘 크기 26의 배열 선언
int[] cnt = new int[26];
// 문자열을 순회하며 빈도수 계산
for (char c : s.toCharArray()) {
// 'a'를 빼서 0~25 사이의 인덱스로 변환 후 카운트 증가
cnt[c - 'a']++;
}
// a부터 z까지의 개수를 공백으로 구분하여 출력
for (int i = 0; i < 26; i++) {
bw.write(cnt[i] + " ");
}
bw.flush();
}
}
알고리즘 분류
문자열 처리 (String), 구현 (Implementation)
'PS > B.O.J' 카테고리의 다른 글
| 11655번: ROT13 (0) | 2026.03.19 |
|---|---|
| 1159번: 농구 경기 (0) | 2026.03.19 |
| 10988번: 팰린드롬인지 확인하기 (0) | 2026.03.19 |
| 2979번: 트럭 주차 (0) | 2026.03.19 |
| 2309번: 일곱 난쟁이 (0) | 2023.03.04 |