본문 바로가기

Coding Test/Problem Number

[Java] 방 번호 [2740번]

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