Algorithm/Baekjoon
[백준 알고리즘][자바] 1475번 : 방 번호
hyunipad
2023. 5. 5. 22:58
반응형
https://www.acmicpc.net/problem/1475
이번 문제는 특별한 알고리즘은 없지만, 반례에 대해 다시 생각해 보게 돼서 작성하게 되었습니다.
방 번호의 숫자를 카운팅하여 max값을 출력하면 되는 간단한 문제입니다.
다만, 처음 코드를 작성할 때, 6와 9를 묶어서 6으로 카운팅 한 후에 홀수냐 짝수냐를 판별해서 다시 계산해 주는 부분을
max값 뒤에다가 작성하다보니 더 높은 카운트 숫자가 앞에 있음에도 불구하고 max가 6으로 잡히는 경우가 생겼습니다.
알고리즘 문제를 풀면서 반례를 찾아야 할 때, 아래를 중점적으로 보면 좋을 거 같습니다.
- 최대, 최소 크기 입력
- 문제에서 경계값이 되는 입력
- 자신의 코드에서 경계값이 되는 입력
문제 자체에서 특별한 경계값이 있는 경우도 있고, 구현 단계에서 자신만의 경계값이 만들어질 때도 있습니다.
문제를 해결하는 재미도 있지만, 반례를 찾았을 때의 기쁨도 상당한 거 같습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
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 N = br.readLine();
int[] count = new int[10];
Arrays.fill(count, 0);
for(int i = 0 ; i < N.length() ; i++) {
int number = Integer.parseInt(String.valueOf(N.charAt(i)));
if(number == 9) { // 9와 6을 하나로 집계
count[6]++;
}else {
count[number]++;
}
}
if(count[6] % 2 == 1) {
count[6] = count[6] / 2 + 1;
}else {
count[6] = count[6] / 2;
}
int max = 0;
for(int i = 0 ; i < count.length ; i++) {
max = Math.max(max, count[i]);
}
bw.write(String.valueOf(max));
br.close();
bw.flush();
bw.close();
}
}
반응형