본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1475번 : 방 번호

by hyunipad 2023. 5. 5.
반응형

https://www.acmicpc.net/problem/1475

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

이번 문제는 특별한 알고리즘은 없지만, 반례에 대해 다시 생각해 보게 돼서 작성하게 되었습니다.

방 번호의 숫자를 카운팅하여 max값을 출력하면 되는 간단한 문제입니다.

 

다만, 처음 코드를 작성할 때, 6와 9를 묶어서 6으로 카운팅 한 후에 홀수냐 짝수냐를 판별해서 다시 계산해 주는 부분을

max값 뒤에다가 작성하다보니  더 높은 카운트 숫자가 앞에 있음에도 불구하고 max가 6으로 잡히는 경우가 생겼습니다.

 

알고리즘 문제를 풀면서 반례를 찾아야 할 때, 아래를 중점적으로 보면 좋을 거 같습니다.

  1. 최대, 최소 크기 입력
  2. 문제에서 경계값이 되는 입력
  3. 자신의 코드에서 경계값이 되는 입력

문제 자체에서 특별한 경계값이 있는 경우도 있고, 구현 단계에서 자신만의 경계값이 만들어질 때도 있습니다.

 

문제를 해결하는 재미도 있지만, 반례를 찾았을 때의 기쁨도 상당한 거 같습니다.

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();
	}

}

 

반응형

댓글