https://www.acmicpc.net/problem/1475
- 예제 입력1
9999
- 예제 출력1
2
- 예제 입력2
122
- 예제 출력2
2
- 예제 입력3
12635
- 예제 출력3
1
- 예제 입력4
888888
- 예제 출력4
6
- 문제 접근
- 한 세트 = 0 ~ 9번
- 6번과 9번은 서로 바꿔 사용 가능
- 방 번호는 100만 이하의 숫자 ⇒ 동일한 숫자로 나오면 999,999 같은 식으로 플라스틱 세트는 최대 6개
- 문제 해결
- 0 ~ 9번까지의 배열 생성
- Counting sort 하는 것처럼 입력받은 숫자를 각 방번호 index에 추가
- 단, 6과 9일 경우 더한 뒤 /2 + %2를 한 값을 동일하게 저장
- 6이 6개, 9가 0개일 경우 9로 대체하여 3개의 세트면 되기 때문
- 배열에서 가장 숫자가 큰 것의 인덱스를 저장
- 슈도 코드
roomNumber (방 번호 문자열 저장)
frequency[10] (0~9 배열 초기화)
for(roomNumber길이만큼 반복){
idx = roomNumber.charAt()
frequency[idx] 1증가
}
set에 6번 + 9번 / 2의 값 저장
set에 6번 + 9번 % 2의 값 누적
6번, 9번방 값 set으로 수정
max (빈도 배열 중 가장 높은 인덱스 저장)
max 출력
- 코딩하기
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String roomNumber = scan.next();
int[] frequency = new int[10]; // 0 ~ 9번방 배열 생성
for(int i = 0; i < roomNumber.length(); i++){
int idx = roomNumber.charAt(i) - '0'; // 각 방번호 값에 따른 인덱스 증가
frequency[idx]++;
}
int sum = frequency[6] + frequency[9]; // 6과 9가 나온 값 합침
int set = sum / 2 + sum % 2; // 홀수일 경우 +1도 해주어야 하기 때문에 % 연산까지 더해 넣기
frequency[6] = set; frequency[9] = set; // 6과 9에 동일하게 셋팅
int max = Arrays.stream(frequency).max().getAsInt(); // 가장 많이 필요한 숫자 추출
System.out.println(max);
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 반복 수열 [2231번] (0) | 2024.07.18 |
---|---|
[Java] 영식이의 손가락 [2740번] (0) | 2024.07.18 |
[Java] 행렬 곱셈 [2740번] (0) | 2024.07.18 |
[Java] 2차원 배열의 합 [2167번] (0) | 2024.07.18 |
[Java] 수들의 합5 [2018번] (0) | 2024.07.18 |