반응형
문제
https://www.acmicpc.net/problem/1157
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] alphabet = new int[26];
String word = sc.nextLine();
int max = 0;
int cnt = 0; //중복 카운팅
for(int i = 0; i < word.length(); i++) { //테스트케이스 수만큼 반복
int s = word.charAt(i); //해당 문자열의 인덱스0부터 문자 한 글자씩 s에 저장
if('a' <= s && s <= 'z' ) { //s가 소문자인 경우
alphabet[s - 'a']++; //해당 인덱스 카운트 증가
} else if('A' <= s && s <= 'Z' ) { //s가 대문자인 경우
alphabet[s - 'A']++;
}
}
for(int i = 0; i < alphabet.length; i++) { //최댓값을 저장한 인덱스 찾기
if(alphabet[max] < alphabet[i]) {
max = i; //해당 인덱스 저장
}
if(alphabet[max] < alphabet[0]) {
max = 0;
}
}
for(int i = 0; i < alphabet.length; i++) { //중복 확인
if(alphabet[i] == alphabet[max]) {
cnt++;
}
}
if(cnt == 1) { //중복이 존재하지 않을 경우
System.out.println((char)('A' + max));
} else if(cnt > 1) { //중복이 존재할 경우
System.out.println("?");
}
sc.close();
}
}
마무리
아스키 문자열 소문자 대문자 처리 + 중복 문자 처리 + 최댓값 찾기 복합적으로 들어있었던 문제.
대소문자 인덱스 저장할 때는 저번에 풀었던 알파벳 찾기 문제를 다시 한 번 참고했다.
[백준 알고리즘] 11809: 알파벳 찾기 풀이(자바)
max를 어떻게 처리해야 중복제거를 할 수 있을지 고민하다가 for문을 하나 더 만들어 max 인덱스의 값과 전체 알파벳 배열을 한번씩 비교해 중복 갯수를 카운팅하는 식으로 구현했다.
온전히 혼자 풀었던 문제. 더 효율적인 답이 있을지 모르겠다.
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|자바] 5622: 다이얼 (0) | 2021.08.28 |
---|---|
[백준|자바] 2908: 상수 (0) | 2021.08.28 |
[백준|자바] 1152: 단어의 개수 (0) | 2021.08.28 |
[백준|자바] 2675: 문자열 반복 (0) | 2021.08.26 |
[백준|자바] 11809: 알파벳 찾기 (0) | 2021.08.26 |
[백준 알고리즘] 11720: 숫자의 합 풀이(자바) (0) | 2021.08.25 |