Table of Contents
이번 글에서는 백준 알고리즘 사이트에서 1157번 단어 공부
문제 풀이 및 설명을 하도록 하겠습니다.
1157번: 단어 공부 문제
문제 내용
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오.
단, 대문자와 소문자를 구분하지 않는다.
문제의 내용 굉장히 단순합니다. 주어진 문자에 대해서 대소문자 구분없이 카운팅만 해주면 됩니다.
문제풀이 요약
- 전체 문자열의 대문자 또는 소문자로 통일
- 알파벳 배열을 만들고, 입력된 문자열의 문자를 카운팅하여 알파벳 배열에 저장
- 배열에서 최댓값을 갖는 인덱스 찾기
- 배열에 최댓값을 갖는 것이 두 개인지 체크
위와 같은 형식으로 문제를 해결하실 수 있습니다.
정답 코드
import java.io.*;
public class B1157 {
static String in;
static int[] alphabet = new int[26];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
in = br.readLine().toLowerCase();
for (int i = 0; i < in.length(); i++) {
alphabet[in.charAt(i) - 97]++;
}
int max = 0, count = 0, maxIdx = -1;
for (int i = 0; i < alphabet.length; i++) {
if (max < alphabet[i]) {
max = alphabet[i];
maxIdx = i;
}
}
for (int i = 0; i < alphabet.length; i++) {
count += (max == alphabet[i]) ? 1 : 0;
if (count == 2) break;
}
bw.write((count < 2) ? (char)(maxIdx + 65) + "\n" : "?\n");
bw.flush();bw.close();
}
}
맺음
간단하게 1157번: 단어 공부 문제 풀이를 해보았습니다. 혹시 궁금하신 점이나 이상한 점이 있으시면 댓글 부탁드리겠습니다.
감사합니다.
Comments
Copied to clipboard