백준 - 단어공부 1157번 [4일차]
시간제한 | 메모리 제한 |
2초 | 128MB |
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
나의코드
package day4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Solution5 {
public static void main(String[] args) throws IOException {
// 단어 공부 1157번
// 입력받은 문자열 가지고 오기
// 문자 길이 만큼 for문으로 탐색하기
// 문자를 저장할 ArrayList
// String s = st.carAt(i);
// s와 동일한 equalsIgnoreCase 있는지 확인 count++
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine().toUpperCase();
String[] s = new String[line.length()];
// 입력받은 문자열 배열에 저장
for(int i=0;i < s.length;i++){
s[i] = line.substring(i,i+1);
}
// 문자의 빈도를 저장할 HashMap
HashMap<String, Integer> map = new HashMap<>();
// HashMap에 문자의 빈도를 저장
for(String key : s) {
map.put(key, map.getOrDefault(key, 0) + 1);
}
// 최대 빈도수 찾기
int maxValue = Collections.max(map.values());
// 최대 빈도수를 가지는 문자의 갯수를 세기 위한 변수
int maxCount = 0;
// 최대 빈도수를 가지는 문자를 저장하기 위한 변수
String maxKey ="";
//HashMap을 순환하면서 최대 빈도수를 가지고 있는 문자 찾기
for(String key : map.keySet()){
//문자가 있으면 maxCount ++
if(map.get(key) == maxValue){
maxCount++;
maxKey = key;
}
}
//최대 빈도수를 가지는 문자가 여러개일 경우
if(maxCount > 1){
System.out.println("?");
}else {
System.out.println(maxKey);
}
}
}
이번엔 HashMap을 사용해 문제 풀어봤다.
getOrDefault를 동일한 이름의 개수를 구할수 있었다
'Algorithm > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 - 파일 정리 (0) | 2024.07.20 |
---|---|
[코딩테스트] 백준 - 회사에 있는 사람 (0) | 2024.07.20 |
[코딩테스트] 백준 - 상수 (0) | 2024.07.20 |
[코딩테스트] 백준 - 할리갈리 (0) | 2024.07.20 |
[코딩테스트] 백준 - 단어의 개수 (0) | 2024.07.20 |