[백준] 1475번 방 번호 - Java

yseo14·2024년 9월 15일

코딩테스트 대비

목록 보기
18/88


방 번호

풀이

입력값인 방번호를 String 타입으로 저장한다.
크기가 10인 int형 배열을 선언 및 초기화한다.
String 타입으로 저장한 방번호를 toCharArray() 메서드를 사용해서 문자 배열로 만들어준다.
그 배열을 반복문을 돌면서 (해당 문자 - '0')으로 int로 바꿔준다.
처음에 선언한 int형 배열에 해당하는 index의 배열 값을 +1 해준다.
이때, 6과 9는 뒤집어서 사용할 수 있기 때문에 9는 없는 값이라고 치고 9를 사용해도 인덱스 6에 해당하는 배열 값을 +1 해준다.
반복문을 다 돌고나서, 인덱스 6인 부분은 2로 나누어준다. 이때, 홀수번 사용된 경우가 있을 수 있으니 나머지값을 더해준다.

위 과정이 끝나면 오름 차순으로 정렬 후 제일 큰 값(인덱스 9)을 출력해준다.

package BOJ;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class sol1475 {

    static int[] nums;
    static String roomNo;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        roomNo = br.readLine();
        nums = new int[10];
        for (char c : roomNo.toCharArray()) {
            int idx = c - '0';
            if (idx == 9) {
                idx = 6;
            }
            nums[idx]++;
        }
        nums[6] = nums[6] / 2 + nums[6] % 2;
        Arrays.sort(nums);
        System.out.println(nums[9]);
    }
}

기억할 부분

1. 아스키 코드를 사용하여 char 타입의 한자리 정수를 int 형으로 변환하기

int idx = c - '0';
이 코드를 보면 char - '0'으로 문자를 정수로 변환한다. 이 방법이 가능한 이유는 0~9는 아스키코드로 48~57에 해당한다. 따라서 '3'의 경우 51을 의미하고 '0'은 48을 의미하기 때문에 '3'-'0'은 int형 3이 된다.

2. Arrays.sort()을 사용한 정렬

위 메서드를 사용하여 배열을 정렬하면 기본적으로 오름차순으로 정렬된다.
DualPivotQuicksort 방식을 사용하여 평균 O(nlog(n)), 최악 O(n^2)의 시간 복잡도를 가진다.

참고: 이 문제에서처럼 배열을 정렬하는 경우, Arrays.sort() 메서드를 사용하고, List, Set을 정렬하는 경우에는 Collections.sort()를 사용한다. Collections.sort()는 TimeSort를 사용하여 평균, 최악 모두 O(nlogn)의 시간복잡도를 가진다.

profile
like the water flowing

0개의 댓글