자바로 개발을 공부하는 김에 오늘부터 그냥 자바로 알고리즘을 하기로 결정했다.
백준 1157번 문제를 풀어보면서 자바로 익숙하게 해보겠다.
문제 풀이
과정
문제를 풀면서 문자열을 배열에 어떤 식으로 넣고 처리해야 할지 고민이 있었다.
대문자는 아스키 코드로 65부터 시작하기 때문에 이것을 활용하여 해결했다.
먼저 입력받은 문자열을 charAt 메서드를 사용해 하나씩 문자로 가져오고 대문자 A를 기준으로 그 문자와의 차이를 계산하여 배열의 인덱스로 사용했다.
각 문자의 빈도를 배열에 저장하고 배열을 알파벳의 숫자인 26만큼 순회하면서 maxCount를 이용하여 가장 빈도가 높은 값을 찾아냈다.
이렇게 최다 빈도 문자를 출력하거나 빈도가 같은 경우 물음표를 출력하도록 구현하였다.
import java.util.Scanner;
public class Bronze_1157 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next().toUpperCase();
int[] count = new int[26];
for (int i = 0; i < input.length(); i++) {
count[input.charAt(i) - 'A']++;
}
int maxCount = 0;
char result = '?';
for (int i = 0; i < 26; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
result = (char) (i+'A');
} else if (count[i] == maxCount) {
result = '?';
}
}
System.out.println(result);
}
}
자바는 클래스 이름을 Main으로 넣어야 답으로 인정된다.
for (int i = 0; i < input.length(); i++) {
count[input.charAt(i) - 'A']++;
}
이 부분에서 입력받은 문자열의 길이만큼 반복문을 돌고 charAt 메서드를 사용하여 문자를 하나씩 가져왓다.
가져온 문자를 'A'와의 차이로 변환하여 배열의 인덱스를 계산했고 그 인덱스의 값을 1씩 증가시켰다.
for (int i = 0; i < 26; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
result = (char) (i+'A');
} else if (count[i] == maxCount) {
result = '?';
}
}
여기선 알파벳 개수인 26번만큼 반복문을 돌면서 각각의 인덱스에 저장된 빈도 수를 확인했다.
현재 최대값인 maxCount보다 큰 값이 발견된다면 maxCount를 해당 값으로 갱신하고
결과값인 result를 인덱스를 문자열로 변환한 값으로 설정한다. i의 값과 'A'를 더한 아스키 코드값을 문자열로 변환해서 결과값으로 둔다.
'Algorithm > 알고리즘' 카테고리의 다른 글
[백준/자바] 2606번 - 바이러스 (1) | 2025.01.21 |
---|---|
[백준/자바] 1260번 - DFS와 BFS 구현하기 (1) | 2025.01.17 |
[백준/파이썬] 28278 (0) | 2024.11.10 |
함수와 재귀함수(Python) (0) | 2024.05.20 |
알고리즘에 도움되는 간단한 파이썬 문법 (0) | 2024.05.12 |