728x90
1475번 방 번호 문제는 문자열 처리 알고리즘입니다.
방 번호 4자리 숫자를 입력 받아서 최소 숫자 세트를 이용하여 표현해야 한다. 문제에서 6과 9은 혼용되어서 사용할 수 있다고 했다. 숫자 세트에는 0부터 9까지의 숫자가 들어 있다.
예제 입력으로 9999 방 번호 숫자가 들어오면, 숫자 세트는 최소 2개를 사용한다. 9는 6으로도 표현할 수 있으므로 숫자 세트 2개에 있는 6, 9, 6, 9 숫자를 이용한다.
6과 9를 혼용해서 사용하므로 처음 입력 받을 때 6 문자열을 모두 9로 변경할 수 있다.
만약, 예제 입력으로 6666이 들어오면 9999로 변경될 수 있다. 문자열 변경을 하고 나서 toCharArray() 메서드를 이용하여 각 숫자별 개수가 몇 개 있는지 체크한다.
int index = 0;
for (char ch : roomNumber.toCharArray()) {
index = (int) ch - 48;
// 숫자 사용 횟수를 증가시킨다.
number[index] += 1;
}
number 배열 인덱스에 위치하는 값은 숫자를 사용한 카운트 값을 의미한다. 예를 들어, number[0]
값이 2 이면, 방 번호 숫자에 0이 2번 나왔다는 것이다.
number[9]
값은 6과 9 두 개의 숫자를 카운트한 값이므로 2로 나누어 줘야 한다.
for (int i = 0; i < 10; i++) {
// 숫자 9의 경우 6과 함께 카운트가 되었으므로 2로 나누어서 반올림한다.
if (i == 9) {
useCount = (int) Math.round(number[9] / 2.0);
} else {
useCount = number[i];
}
if (useCount > maxUseCount) {
maxUseCount = useCount;
}
}
마지막으로 각 숫자별 카운트 값 중 가장 큰 값이 최소 숫자 세트를 의미한다.
import java.util.Scanner;
/**
* 방 번호 문제<br>
* 알고리즘 분류 : 문자열 처리
*
* @author jayden-lee
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 각 숫자별(0~9) 사용한 횟수를 저장하는 배열을 생성한다.
int[] number = new int[10];
String roomNumber = scanner.next();
// 6과 9는 혼용되어서 사용할 수 있으므로
// 6을 9로 값을 변경한다.
roomNumber = roomNumber.replace('6', '9');
int index;
for (char ch : roomNumber.toCharArray()) {
index = (int) ch - 48;
// 숫자 사용 횟수를 증가시킨다.
number[index] += 1;
}
int maxUseCount = -1;
int useCount = 0;
for (int i = 0; i < 10; i++) {
// 숫자 9의 경우 6과 함께 카운트가 되었으므로 2로 나누어서 반올림한다.
if (i == 9) {
useCount = (int) Math.round(number[9] / 2.0);
} else {
useCount = number[i];
}
if (useCount > maxUseCount) {
maxUseCount = useCount;
}
}
System.out.println(maxUseCount);
scanner.close();
}
}
'Algorithm' 카테고리의 다른 글
백준알고리즘 10988번 팰린드롬인지 확인하기 (0) | 2019.04.25 |
---|---|
백준알고리즘 1094번 막대기 (0) | 2019.04.22 |
백준알고리즘 11654번 아스키 코드 (0) | 2019.04.15 |
백준알고리즘 1929번 소수 구하기 (0) | 2019.04.07 |
백준 알고리즘 1152번 단어의 개수 (0) | 2019.04.06 |
댓글